파일 샘플 속도를 수정하지 않고 WAV 파일에서 원시 오디오 샘플 (가장 이상적으로는 플로트)을 얻는 가장 간단한 방법은 무엇입니까?WAV 파일에서 원시 오디오 샘플 읽기
나는 https://stackoverflow.com/a/4572990/1116197에있는 예제를 따라 갔지만 그 다음으로는 buffer
에서 플로트를 추출하는 방법을 모르겠습니다. 그냥 buffer[n]
하는 것은 작동하지 않습니다. basicDescription.mFormatFlags
에 따르면 파일 내가 대신 ExtAudioFileRef
를 사용하여 (float
들로) 데이터를 추출 할 관리했습니다 kAudioFormatFlagIsSignedInteger
및 kAudioFormatFlagIsPacked
입니다,하지만 당신이 원하는 출력 형식을 지정해야합니다,하지만 난을 변경하지 않으 sampleRate. 예 : A file’s data format. Value is a read-only AudioStreamBasicDescription struct.
- - 그래서 나는 할 수 없습니다 당신은 내가 처음 ExtAudioFileGetProperty
를 사용하여 사용하여 파일을 AudioStreamBasicDescription
얻을 수 추측하지만, 애플의 워드 프로세서 (http://developer.apple.com/library/ios/#documentation/MusicAudio/Reference/ExtendedAudioFileServicesReference/Reference/reference.html)에 따라 내가 필요로하는 속성 ID는 읽기 전용 kExtAudioFileProperty_FileDataFormat
입니다
AudioStreamBasicDescription audioFormat;
audioFormat.mSampleRate = 44100;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kLinearPCMFormatFlagIsFloat;
audioFormat.mBitsPerChannel = sizeof(Float32) * 8;
audioFormat.mChannelsPerFrame = 1; // Mono
audioFormat.mBytesPerFrame = audioFormat.mChannelsPerFrame * sizeof(Float32); // == sizeof(Float32)
audioFormat.mFramesPerPacket = 1;
audioFormat.mBytesPerPacket = audioFormat.mFramesPerPacket * audioFormat.mBytesPerFrame; // = sizeof(Float32)
ExtAudioFileSetProperty(
fileRef,
kExtAudioFileProperty_ClientDataFormat,
sizeof (AudioStreamBasicDescription),
&audioFormat
),
을 수행 할 수 있습니다 그것을 추가 수정하십시오 mFormatFlags = kLinearPCMFormatFlagIsFloat
그래서 내가 할 수있는 위의, 그리고 새로운 ASBD를 만들고 모든 것을 복사 할 것 같아요,하지만 모두가 너무 복잡해 보인다 그래서 내가 잘못된 트리를 짖는 지 궁금해. 전적으로? 이 작업을 수행하는 더 간단한 방법이 있습니까?!
나는이 접근 방식으로 갈 것이다, 고마워! – Mark