2016-09-29 84 views
0

我有这样的代码在夫特3和我的输出是大多数时间0.0零和很少我看到非常小的数字到E^-50ExtAudioFile成float缓冲区产生零

指定fileurl是记录。咖啡厅里有声音。

有谁知道这是怎么回事?

func readBuff(_ fileURL:CFURL) { 
    var fileRef:ExtAudioFileRef? = nil 


let openStatus = ExtAudioFileOpenURL(fileURL , &fileRef) 
guard openStatus == noErr else { 
    print("Failed to open audio file '\(fileURL)' with error \(openStatus)") 
    return 
} 

var audioFormat2 = AudioStreamBasicDescription() 
audioFormat2.mSampleRate = 44100; // GIVE YOUR SAMPLING RATE 
audioFormat2.mFormatID = kAudioFormatLinearPCM; 
audioFormat2.mFormatFlags = kLinearPCMFormatFlagIsFloat; 
audioFormat2.mBitsPerChannel = UInt32(MemoryLayout<Float32>.size) * 8 
audioFormat2.mChannelsPerFrame = 1; // Mono 
audioFormat2.mBytesPerFrame = audioFormat2.mChannelsPerFrame * UInt32(MemoryLayout<Float32>.size); // == sizeof(Float32) 
audioFormat2.mFramesPerPacket = 1; 
audioFormat2.mBytesPerPacket = audioFormat2.mFramesPerPacket * audioFormat2.mBytesPerFrame; // = sizeof(Float32) 

//apply audioFormat2 to the extended audio file 
ExtAudioFileSetProperty(fileRef!, kExtAudioFileProperty_ClientDataFormat,UInt32(MemoryLayout<AudioStreamBasicDescription>.size),&audioFormat2) 

let numSamples = 1024 //How many samples to read in at a startTime 
let sizePerPacket:UInt32 = audioFormat2.mBytesPerPacket // sizeof(Float32) = 32 byts 
let packetsPerBuffer:UInt32 = UInt32(numSamples) 
let outputBufferSize:UInt32 = packetsPerBuffer * sizePerPacket //4096 

//so the 1 value of outputbuffer is a the memory location where we have reserved space 
let outputbuffer = UnsafeMutablePointer<UInt8>.allocate(capacity: MemoryLayout<UInt8>.size * Int(outputBufferSize)) 


var convertedData = AudioBufferList() 
convertedData.mNumberBuffers = 1 //set this for Mono 
convertedData.mBuffers.mNumberChannels = audioFormat2.mChannelsPerFrame // also = 1 
convertedData.mBuffers.mDataByteSize = outputBufferSize 
convertedData.mBuffers.mData = UnsafeMutableRawPointer(outputbuffer) 

var frameCount:UInt32 = UInt32(numSamples) 
while (frameCount > 0) { 
Utility.check(ExtAudioFileRead(fileRef!, 
           &frameCount, 
           &convertedData), 
       operation: "Couldn't read from input file") 

if frameCount == 0 { 
    Swift.print("done reading from file") 
    return 
} 

var arrayFloats:[Float] = [] 
let ptr = convertedData.mBuffers.mData?.assumingMemoryBound(to: Float.self) 

var j = 0 
var floatDataArray:[Double] = [882000]// SPECIFY YOUR DATA LIMIT MINE WAS 882000 , SHOULD BE EQUAL TO OR MORE THAN DATA LIMIT 

if(frameCount > 0){ 
    var audioBuffer:AudioBuffer = convertedData.mBuffers 

    let floatArr = UnsafeBufferPointer(start: audioBuffer.mData?.assumingMemoryBound(to: Float.self), count: 882000) 

    for i in 0...1024{ 
     //floatDataArray[j] = Double(floatArr[i]) //put your data into float array 
     // print("\(floatDataArray[j])") 
     floatDataArray.append(Double(floatArr[i])) 


     print(Float((ptr?[i])!)) 


     j += 1 
    } 
    // print(floatDataArray) 
} 
} 

}

我从

guard let fileURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, "./output.caf" as CFString!, .cfurlposixPathStyle, false) else { 

    // unable to create file 
    exit(-1) 
} 

步骤阅读记录后:

Swift.print("Recording, press <return> to stop:\n") 

// wait for a key to be pressed 
getchar() 

// end recording 
Swift.print("* recording done *\n") 
recorder.running = false 

// stop the Queue 
Utility.check(AudioQueueStop(queue!, true), 
       operation: "AudioQueueStop failed") 

// a codec may update its magic cookie at the end of an encoding session 
// so reapply it to the file now 
Utility.applyEncoderCookie(fromQueue: queue!, toFile: recorder.recordFile!) 

// cleanup 
    AudioQueueDispose(queue!, true) 
    AudioFileClose(recorder.recordFile!) 
    readBuff(fileURL) 

回答

1

你设置你的ExtAudioFile和其客户的格式,但你”实际上并没有从它读取(与ExtAudioFileRead),所以你的“输出”实际上是你ninitialised,在你的情况下,非常小。

+0

谢谢!使用让状态= ExtAudioFileRead( fileRef! &,帧数, &convertedData ) 我得到“失败,出现错误-66567来读取音频文件数据” – masaldana2

+1

可以为您的代码添加到你的问题,说什么样的音频文件你正在阅读? –

+0

好吧我能读取像“-0.0029776811134070158,-0.0027382420375943184,-0.0023274924606084824,-0.0018719543004408479,”为什么有些是消极和积极的? – masaldana2