我有一些原始的聲音數據,我想製作成AIFF文件格式。我知道音頻數據的細節。我試圖從音頻中創建一個wave,但那不起作用。 OS X確實有一個創建頭文件的功能,但它直接寫入一個文件,我可能不想這麼做(該功能,SetupAIFFHeader
已棄用且在64位代碼中不可用)。如何創建一個AIFF文件
0
A
回答
1
Apple的Core Audio API將創建數據並將其寫入AIFF文件和其他格式。它工作得很好,但在我看來,API很難使用。我將在下面粘貼一些示例代碼,但您可能想要更改它。 AudioFileWriteBytes
一次可以寫入2個以上的字節。在AudioToolbox/ExtendedAudioFile.h
中有另一個包裝API,它可以讓你編寫一個像32位浮點數的格式,並將其轉換爲底層格式,不管是AIFF/PCM還是壓縮格式。
double sampleRate = 44100;
double duration = ...;
long nSamples = (long)(sampleRate * duration);
// Format struct for 1 channel, 16 bit PCM audio
AudioStreamBasicDescription asbd;
memset(&asbd, 0, sizeof(asbd));
asbd.mSampleRate = sampleRate;
asbd.mFormatID = kAudioFormatLinearPCM;
asbd.mFormatFlags = kAudioFormatFlagIsBigEndian | kAudioFormatFlagIsSignedInteger;
asbd.mBitsPerChannel = 16;
asbd.mChannelsPerFrame = 1;
asbd.mFramesPerPacket = 1;
asbd.mBytesPerFrame = 2;
asbd.mBytesPerPacket = 2;
CFURLRef url = makeUrl("hello.aiff");
AudioFileID audioFile;
OSStatus res;
res = AudioFileCreateWithURL(url, kAudioFileAIFFType, &asbd,
kAudioFileFlags_EraseFile, &audioFile);
checkError(res);
UInt32 numBytes = 2;
for (int i=0; i<nSamples; i++) {
SInt16 sample = ... // something between SHRT_MIN and SHRT_MAX;
sample = OSSwapHostToBigInt16(sample);
res = AudioFileWriteBytes(audioFile, false, i*2, &numBytes, &sample);
checkError(res);
}
res = AudioFileClose(audioFile);
checkError(res);
checkError
聲明res == noErr。 makeUrl
看起來像:
CFURLRef makeUrl(const char *cstr) {
CFStringRef path = CFStringCreateWithCString(0, cstr, kCFStringEncodingUTF8);
CFURLRef url = CFURLCreateWithFileSystemPath(NULL, path, 0, false);
CFRelease(path);
return url;
}
0
儘管我討厭車輪改造,我懷疑你最好的選擇可能是推出自己的AIFF保存套路。
AIFF是在Amiga上使用的舊電子藝術EA-IFF格式的擴展;它是一系列4字節標識符(類似於FOURCC),塊長度和數據有效載荷。維基百科文章內容豐富,並提供其他網站的鏈接,其中包含有關格式的詳細信息。
0
我能寫正確的AIFF文件。讓我最後一點是我使用sizeof()作爲結構的大小,其中大小省略了前八個字節。我確實使用Apple的棄用AIFF.h頭文件來獲取結構,並且似乎QuickTime X和7都不讀取我在其中設置的元數據。
你可以在PlayerPRO的PlayerPRO 6分支上看到我的作品。它位於PPApp_AppDelegate.m
函數中的一個文件-createAIFFDataFromSettings:data:
相關問題
- 1. 如何在Java中使用.aiff文件?
- 2. 創建exe文件時如何創建一個lib文件
- 3. 從wav和aiff文件創建mp3預覽
- 4. 如何創建一個用於創建,創建一個批處理文件
- 5. 如何創建一個IPA文件?
- 6. 如何創建一個.EFT文件?
- 7. 如何創建一個default.conf文件
- 8. 如何創建一個ics文件?
- 9. 如何創建一個新的文件
- 10. 如何創建一個dll文件
- 11. 如何創建一個夾具文件
- 12. 如何創建一個.jar文件?
- 13. 如何從我創建的文件(.cs文件)創建一個exe文件?
- 14. 如何創建一個文件夾來進一步創建.csv文件?
- 15. 如何從兩個.doc文件創建一個.zip文件?
- 16. 如何從文本文件創建一個wav文件?
- 17. 如何能DCR文件創建一個文本文件
- 18. 如何挽救一個巨大的,可能是腐敗的AIFF文件?
- 19. 創建一個.jar文件
- 20. 創建一個make文件
- 21. 創建一個plist文件
- 22. 創建一個exe文件
- 23. 創建一個Dll文件
- 24. 創建一個xml文件
- 25. 創建一個AVI文件
- 26. 創建一個CSV文件
- 27. 創建一個pcap文件
- 28. 創建一個Microsoft.JScript文件
- 29. 創建一個.bat文件
- 30. 創建一個makefile文件
我能夠使QuickTime播放器7打開一個AIFF文件,沒有別的。代碼在我的SourceForge項目頁面上:[link](http://sourceforge.net/projects/playerpro)。 – MaddTheSane
有一個免費的Mac,Windows和Linux庫,可以使用「fopen/fread/fwrite」風格來讀寫AIFF/AIFC文件(無壓縮),從而免除您必須編寫自己的低級別RIFF代碼的麻煩。 http://blogs.zynaptiq.com/bernsee/category/miniaiff/ –