什么是AudioStreamBasicDescription为m4a文件格式

我已经尝试用更多的AudioStreamBasicDescription为m4a文件格式。 我仍然遇到一些问题。

请任何人告诉我确切的AudioStreamBasicDescription为m4a文件格式。

您可以使用ExtAudioFileGetProperty从现有的m4aaudio文件中获取ASBD。

欲了解更多详情请点击这里

你可以用2(至less)不同的方法获得一个文件的ASBD。 您可以使用“ExtAudioFileGetProperty”或“AudioFileGetProperty”。

AudioFileGetProperty:

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"m4a"]; CFURLRef soundFileURL = (__bridge CFURLRef)[NSURL fileURLWithPath:soundFilePath]; if (soundFileURL != nil) { AudioFileID audioFile; OSStatus theError = noErr; theError = AudioFileOpenURL(soundFileURL, kAudioFileReadPermission, 0, &audioFile); if(theError != noErr) { printf("AudioFileOpenURL failed!"); return; } AudioStreamBasicDescription asbd; UInt32 size = sizeof(asbd); theError = AudioFileGetProperty(audioFile, kAudioFilePropertyDataFormat, &size, &asbd); if(theError != noErr) { printf("kAudioFilePropertyDataFormat failed!"); return; } else { printf("Sample Rate : %f\n", asbd.mSampleRate); /* Float64 mSampleRate; AudioFormatID mFormatID; AudioFormatFlags mFormatFlags; UInt32 mBytesPerPacket; UInt32 mFramesPerPacket; UInt32 mBytesPerFrame; UInt32 mChannelsPerFrame; UInt32 mBitsPerChannel; UInt32 mReserved; */ } } 

ExtAudioFileGetProperty:

 NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"m4a"]; CFURLRef soundFileURL = (__bridge CFURLRef)[NSURL fileURLWithPath:soundFilePath]; if (soundFileURL != nil) { OSStatus theError = noErr; ExtAudioFileRef fileRef; theError = ExtAudioFileOpenURL(soundFileURL, &fileRef); if(theError != noErr) { printf("ExtAudioFileOpenURL failed!"); return; } AudioStreamBasicDescription asbd; UInt32 size = sizeof(asbd); theError = ExtAudioFileGetProperty(fileRef, kExtAudioFileProperty_FileDataFormat, &size, &asbd ); }