2016-09-29 5 views
0

I 스위프트 3 코드를 생산 내 출력은 대부분 0.0 제로이며 거의 I가^-50ExtAudioFile은 제로

fileURL이 기록되는 예를 매우 작은 숫자를 참조하지 않는다. 그것에 소리와 함께 caf.

누구인지 알아 보시겠습니까?

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) 
} 

단계에서 읽고 있어요 : 당신은 당신의 ExtAudioFile와 클라이언트 형식을 설정하는

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

있지만 ' 실제로 그것을 읽지 않고 (ExtAudioFileRead), "출력"은 실제로 u입니다. 귀하의 경우에는 매우 작습니다.

+0

고마워요! 하게 사용하는 상태 = ExtAudioFileRead ( fileRef! 및 frameCount, & convertedData ) 내가 "오류 -66567와 오디오 파일에서 데이터를 읽지 못했습니다"GET 는 – masaldana2

+1

당신은 당신의 질문에이 코드를 추가하고 말할 수있는 오디오 파일의 종류 너 읽고 있니? –

+0

ok "-0.0029776811134070158, -0.0027382420375943184, -0.0023274924606084824, -0.0018719543004408479"와 같은 값을 읽을 수있었습니다. 왜 일부 값이 음수이고 양수입니까? – masaldana2