美文网首页
pcm实时编码wav ios

pcm实时编码wav ios

作者: adaodao3056 | 来源:发表于2022-07-01 17:18 被阅读0次

用recordedTotalVoiceData 记录总的data数据(用于header的重写)
每次写frame之前 重写header即可

// 将pcm存为wav文件

  • (NSString *) getAndCreatePlayableFileFromPcmData:(BOOL)force :(NSData *)frame{

    dispatch_async(self.ioQueue, ^{

      short NumChannels = 1;       //录音通道数
      short BitsPerSample = 16;    //线性采样位数
      int SamplingRate = 16000;     //录音采样率(Hz)
      int numOfSamples = (int)self.recordedTotalVoiceData.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;
      
      NSData *ttdata = [NSData dataWithContentsOfFile:self.wavFilePath];
      const char *wavFilePathChar = [self.wavFilePath cStringUsingEncoding:NSUTF8StringEncoding];
      @synchronized (self->_recordedTotalVoiceData) {
          
          FILE *fout = fopen(wavFilePathChar, "r+");
          if (ttdata.length == 0) {
              fclose(fout);
              fout = fopen(wavFilePathChar, "w");
          }
          if(fout == NULL){
              return;
          }
          
          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 = [NSFileHandle fileHandleForUpdatingAtPath:self.wavFilePath];
      [handle seekToEndOfFile];
      // self.recordedData 为需要保存的pcm数据
      @synchronized (self->_recordedTotalVoiceData) {
          [handle writeData:frame];
      }
    

    });

    return nil;
    }

相关文章

  • pcm实时编码wav ios

    用recordedTotalVoiceData 记录总的data数据(用于header的重写)每次写frame之前...

  • iOS语音对讲(三)FFmpeg实时解码AAC并播放PCM

    本文介绍iOS实时语音双向对讲功能:(一)实时采集PCM并编码AAC(二)RTSP+RTP协议实时传输(三)FFm...

  • iOS语音对讲(二)RTSP+RTP协议实时传输

    本文介绍iOS实时语音双向对讲功能:(一)实时采集PCM并编码AAC(二)RTSP+RTP协议实时传输(三)FFm...

  • iOS语音对讲(一)实时采集PCM并编码AAC

    本文介绍iOS实时语音双向对讲功能:(一)实时采集PCM并编码AAC(二)RTSP+RTP协议实时传输(三)FFm...

  • PCM WAV

    pcm(不压缩),也称为raw格式。音频输入最原始的格式,不用再解码。 wav(不压缩,pcm编码):在pcm文件...

  • lame实时mp3编码录音过程中的pcm数据

    本文demo:XBVoiceTool 包括录音、播放PCM、播放MP3|AAC,混音、实时AAC编码pcm、实时M...

  • 常用压缩编码格式

    WAV编码 WAV编码的一种实现方式(其实它有非常多实现方式,但都是不会进行压缩操作).就是在源PCM数据格式的前...

  • 录音程序

    1.获取pcm文件: 2.pcm转wav 3.录音转为pcm再转为wav:

  • [kalid] pcm2wav

    20180827 qzd pcm文件转wav文件时,主要是在pcm文件加入wav的头。wav的文件头包含wav标示...

  • 音视频学习(五)

    音频编码 WAV编码是在PCM数据格式的前面加44个字节,分别用来存储PCM的采样率、声道数、数据格式等信息特点:...

网友评论

      本文标题:pcm实时编码wav ios

      本文链接:https://www.haomeiwen.com/subject/jnwcbrtx.html