내 응용 프로그램에서 오디오 파일을 생성해야하며 마지막 Android 버전 다음에 파일 생성기를 쓰고 있습니다. 안드로이드에서는 OKIO을 사용하여 기본 NSData를 사용하는 IO 및 IOS를 처리합니다.WAV 파일을 만들 때 잘못된 바이트가 생성되었습니다.
모든 WAV 파일에는 데이터 판독기 (미디어 플레이어)에 대한 매개 변수를 알리기위한 머리글이 필요합니다.
인터넷에서 제공되는 일부 사양에 따라 바이트를 쓰는이 파일 생성기를 사용합니다.
//Audio file content, this variable will be used
//to storage the audio data (PCM).
var content = [UInt8]() //This is not empty.
var fileSize: Int = 0 //this is not zero.
//Total size of the file, with the header.
let totalFileSize = fileSize + HEADER_SIZE
//Header data
let header = NSMutableData()
//RIFF
header.append([UInt8]("RIFF".utf8), length: 4)
//Size of the entity file
header.append(Data(bytes: readInt(Int32(totalFileSize).littleEndian)))
//WAVE
header.append([UInt8]("WAVE".utf8), length: 4)
//FMT
header.append([UInt8]("fmt ".utf8), length: 4)
//BITRATE
header.append(Data(bytes: readInt(BITRATE.littleEndian)))
//Audio format
var audioFormat = AUDIO_FORMAT_PCM.littleEndian
header.append(&audioFormat, length: 2)
//Number of channels
var audioChannels = CHANNELS.littleEndian
header.append(&audioChannels, length: 2)
//Sample rate
var sampleRate = SAMPLE_RATE.littleEndian
header.append(&sampleRate, length: 4)
//Byte rate
var byteRate = ((SAMPLE_RATE*UInt32(CHANNELS)*UInt32(BYTES_PER_SAMPLE))/UInt32(8)).littleEndian
header.append(&byteRate, length: 4)
//Block align
var blockAlign = (UInt16(CHANNELS) * UInt16(BYTES_PER_SAMPLE)/UInt16(8)).littleEndian
header.append(&blockAlign, length: 2)
//Bytes per sample
var bytesPerSample = BYTES_PER_SAMPLE.littleEndian
header.append(&bytesPerSample, length: 2)
//Data
header.append([UInt8]("data".utf8), length: 4)
//Size of the audio data
var sizeLittleEndian = UInt32(fileSize).littleEndian
header.append(&sizeLittleEndian, length: 4)
print(header.length) //44
이 버퍼에 쓰기 지능이 방법을 사용
안드로이드에서func readInt(_ i: Int32) -> [UInt8] {
return [UInt8(truncatingBitPattern: (i >> 24) & 0xff),
UInt8(truncatingBitPattern: (i >> 16) & 0xff),
UInt8(truncatingBitPattern: (i >> 8) & 0xff),
UInt8(truncatingBitPattern: (i ) & 0xff)]
}
이 파일은 어떤 문제없이 생성되고있다. 하지만 iOS에서는이 두 매개 변수가 잘못되었습니다.
이정말 무슨 일이 일어나고 있는지 모르는 3, 당신이 나를
을 도울 수있는 스위프트 (아이폰 OS 코드에 의해 생성 된 안드로이드 코드와 바닥에 생성 된 대부분의 정상 파일)을 봐?
해결 했습니까? – astromme
예 :) 해결되었습니다! –
여기에 답변을 게시 할 수 있습니까? – astromme