// 將pcm存為wav文件
- (NSString *) getAndCreatePlayableFileFromPcmData{
NSArray *arrDocumentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentPath = [arrDocumentPaths objectAtIndex:0];
NSString *dirFilePath = [documentPath stringByAppendingPathComponent:@"audio"];
// 注意這里必須要有這個文件夾,下面存儲音頻時才不會報錯
if (![[NSFileManager defaultManager] fileExistsAtPath:dirFilePath]) {
[[NSFileManager defaultManager] createDirectoryAtPath:dirFilePath withIntermediateDirectories:YES attributes:nil
error:NULL];
}
NSDate *date = [NSDate date];
NSString *fileName = [NSString stringWithFormat:@"iOS_%@.wav",[self.dateFormatter stringFromDate:date]];
NSString *wavFilePath = [dirFilePath stringByAppendingPathComponent:fileName];
short NumChannels = 1; //錄音通道數
short BitsPerSample = 16; //線性采樣位數
int SamplingRate = 16000; //錄音采樣率(Hz)
int numOfSamples = (int)self.recordedData.length;
int ByteRate = NumChannels*BitsPerSample*SamplingRate/8;
short BlockAlign = NumChannels*BitsPerSample/8;
int DataSize = NumChannels*numOfSamples*BitsPerSample/8;
int chunkSize = 16;
int totalSize = 46 + DataSize;
short audioFormat = 1;
const char *wavFilePathChar = [wavFilePath cStringUsingEncoding:NSUTF8StringEncoding];
@synchronized (self) {
FILE *fout = fopen(wavFilePathChar, "w");
if(fout == NULL){
return nil;
}
fwrite("RIFF", sizeof(char), 4,fout);
fwrite(&totalSize, sizeof(int), 1, fout);
fwrite("WAVE", sizeof(char), 4, fout);
fwrite("fmt ", sizeof(char), 4, fout);
fwrite(&chunkSize, sizeof(int),1,fout);
fwrite(&audioFormat, sizeof(short), 1, fout);
fwrite(&NumChannels, sizeof(short),1,fout);
fwrite(&SamplingRate, sizeof(int), 1, fout);
fwrite(&ByteRate, sizeof(int), 1, fout);
fwrite(&BlockAlign, sizeof(short), 1, fout);
fwrite(&BitsPerSample, sizeof(short), 1, fout);
fwrite("data", sizeof(char), 4, fout);
fwrite(&DataSize, sizeof(int), 1, fout);
fclose(fout);
NSFileHandle *handle;
handle = [NSFileHandle fileHandleForUpdatingAtPath:wavFilePath];
[handle seekToEndOfFile];
// self.recordedData 為需要保存的pcm數據
[handle writeData:self.recordedData];
[handle closeFile];
return wavFilePath;
}
}
iOS PCM音頻數據轉wav
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- 參考 PCM音頻采樣數據處理https://blog.csdn.net/leixiaohua1020/articl...
- 因為正好之前寫過 Aduio Unit 的一些應用例子(包括錄音、播放PCM、播放MP3|AAC,混音等),這里不...
- 我上篇文章有交大家如何編譯Opus庫 不多說直接貼代碼了 使用方法 首先 使用audioqueue 來錄制音頻數...
- 接下來會分為一下幾點來介紹: 基礎知識準備 音頻開發(fā)經常遇到的專業(yè)性詞語 (1) 采樣率 “音頻采樣率” 是指錄音...