ios - 录音时静音音频 AVAssetWriterInput
<p><p>我正在使用 <code>AVAssetWriter</code> 录制视频和音频,以分别从 <code>AVCaptureVideoDataOutput</code> 和 <code>AVCaptureAudioDataOutput</code> 附加 <code>CMSampleBuffer</code>。我想做的是由用户自行决定在录制期间将音频静音。</p>
<p>我假设最好的方法是创建一个空的 <code>CMSampleBuffer</code> 像 </p>
<pre><code>CMSampleBufferRef sb;
CMSampleBufferCreate(kCFAllocatorDefault, NULL, YES, NULL, NULL, NULL, 0, 1, &sti, 0, NULL, &sb);
;
CFRelease(sb);
</code></pre>
<p>但这不起作用,所以我假设我需要创建一个静音音频缓冲区。我该怎么做?有没有更好的方法?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我之前通过调用处理 SampleBuffer 中的数据并将其全部归零的函数来完成此操作。如果您的音频格式未使用 SInt16 样本大小,则可能需要对此进行修改。</p>
<p>您还可以使用相同的技术以其他方式处理音频。</p>
<pre><code>- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
if(isMute){
;
}
}
- (void) muteAudioInBuffer:(CMSampleBufferRef)sampleBuffer
{
CMItemCount numSamples = CMSampleBufferGetNumSamples(sampleBuffer);
NSUInteger channelIndex = 0;
CMBlockBufferRef audioBlockBuffer = CMSampleBufferGetDataBuffer(sampleBuffer);
size_t audioBlockBufferOffset = (channelIndex * numSamples * sizeof(SInt16));
size_t lengthAtOffset = 0;
size_t totalLength = 0;
SInt16 *samples = NULL;
CMBlockBufferGetDataPointer(audioBlockBuffer, audioBlockBufferOffset, &lengthAtOffset, &totalLength, (char **)(&samples));
for (NSInteger i=0; i<numSamples; i++) {
samples = (SInt16)0;
}
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - 录音时静音音频 AVAssetWriterInput,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/11759076/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/11759076/
</a>
</p>
页:
[1]