标签: audio-converter

无法使用AudioFileStreamOpen的AudioFileStream_PacketsProc回调中的AudioConverterFillComplexBuffer将mp3转换为PCM

我有一个AudioFileStream_PacketsProc回调设置,AudioFileStreamOpen用于处理将音频数据包转换为PCM AudioConverterFillComplexBuffer.我遇到的问题是我在AudioConverterFillComplexBuffer调用后得到-50 OSStatus(paramErr).下面是使用了哪些参数AudioConverterFillComplexBuffer以及如何制作参数的片段:

        audioConverterRef = AudioConverterRef()

        // AudioConvertInfo is a struct that contains information
        // for the converter regarding the number of packets and 
        // which audiobuffer is being allocated
        convertInfo? = AudioConvertInfo(done: false, numberOfPackets: numberPackets, audioBuffer: buffer,
            packetDescriptions: packetDescriptions) 

        var framesToDecode: UInt32 = pcmBufferTotalFrameCount! - end

        var localPcmAudioBuffer = AudioBuffer()
        localPcmAudioBuffer.mData = pcmAudioBuffer!.mData.advancedBy(Int(end * pcmBufferFrameSizeInBytes!))

        var localPcmBufferList = AudioBufferList(mNumberBuffers: 1, mBuffers: AudioBuffer(mNumberChannels: 0, mDataByteSize: 0, mData: nil))
        localPcmAudioBuffer = localPcmBufferList.mBuffers …
Run Code Online (Sandbox Code Playgroud)

audio-converter audiounit ios swift swift2

15
推荐指数
1
解决办法
1608
查看次数

使用ffmpeg将文件从一种格式转换为另一种格式

我是新手ffmpeg,我试图找出如何将音频或视频文件从一种格式转换为另一种格式.我不想使用CLI,我只是想知道我是否可以ffmpeg用作库并调用函数将文件从一种格式转换为另一种格式.我浏览了文档并找到了函数avcodec_encode_audio,avcodec_encode_video但不清楚我如何使用它来转换.教程或示例将非常有用.

c ffmpeg audio-converter video-conversion

11
推荐指数
1
解决办法
2万
查看次数

OS X/iOS - 使用AudioConverterFillComplexBuffer的缓冲区的采样率转换

我正在为一个名为XAL音频库编写CoreAudio后端.输入缓冲区可以具有各种采样率.我正在使用单个音频单元进行输出.想法是转换缓冲区并在将它们发送到音频单元之前将它们混合.

只要输入缓冲区具有与输出音频单元相同的属性(采样率,通道数等),一切都有效.因此,混合部分起作用.

但是,我坚持采样率和通道数转换.根据我的想法,这对于Audio Converter Services API来说是最容易的.我设法建造了一个转换器; 我们的想法是输出格式与输出单元格式相同,但可能会根据转换器的目的进行调整.

音频转换器已成功构建,但在调用时AudioConverterFillComplexBuffer(),我得到输出状态错误-50.

如果我能在这段代码上获得另一组眼球,我会很高兴.问题可能在下面的某个地方AudioConverterNew().变量stream包含传入(和传出)缓冲区数据,并包含传入(和传出)缓冲区数据的streamSize字节大小.

我做错了什么?

void CoreAudio_AudioManager::_convertStream(Buffer* buffer, unsigned char** stream, int *streamSize)
{
    if (buffer->getBitsPerSample() != unitDescription.mBitsPerChannel || 
        buffer->getChannels() != unitDescription.mChannelsPerFrame || 
        buffer->getSamplingRate() != unitDescription.mSampleRate)
    {
        printf("INPUT STREAM SIZE: %d\n", *streamSize);
        // describe the input format's description
        AudioStreamBasicDescription inputDescription;
        memset(&inputDescription, 0, sizeof(inputDescription));
        inputDescription.mFormatID = kAudioFormatLinearPCM;
        inputDescription.mFormatFlags = kLinearPCMFormatFlagIsPacked | kLinearPCMFormatFlagIsSignedInteger;
        inputDescription.mChannelsPerFrame = buffer->getChannels();
        inputDescription.mSampleRate = buffer->getSamplingRate();
        inputDescription.mBitsPerChannel = buffer->getBitsPerSample();
        inputDescription.mBytesPerFrame = (inputDescription.mBitsPerChannel …
Run Code Online (Sandbox Code Playgroud)

iphone macos core-audio sample-rate audio-converter

9
推荐指数
1
解决办法
1万
查看次数

音调淡出后如何正确销毁ToneUnit?

我使用基于Matt Gallagher 经典示例的 AudioUnits在iPhone上生成音调.为了避免开始/结束时的唧唧声和咔嗒声,我在回调中淡入/淡出幅度RenderTone.我希望在淡出结束时摧毁ToneUnit,也就是说,在振幅达到零之后.我能想到的唯一方法就是从回调中调用实例方法:

    if (PlayerState == FADING_OUT) {
        amplitude -= stepsize;
        if (amplitude <= 0) {
            amplitude = 0;
            PlayerState = OFF;
            [viewController destroyToneUnit];
        }
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,这比我想象的更具挑战性.首先,我仍然得到了fadeout应该消除的最后点击.另一方面,我收到此日志通知:

<AURemoteIO::IOThread> Someone is deleting an AudioConverter while it is in use.
Run Code Online (Sandbox Code Playgroud)

这条消息意味着什么,为什么我得到它?

如何我杀ToneUnit?我怀疑发生了点击,因为RenderTonedestroyToneUnit在不同的线程上运行.如何让这些同步?


如果它有用,这是我的destroyToneUnit实例方法:

- (void) destroyToneUnit {
    AudioOutputUnitStop(toneUnit);
    AudioUnitUninitialize(toneUnit);
    AudioComponentInstanceDispose(toneUnit);
    toneUnit = nil;
}
Run Code Online (Sandbox Code Playgroud)

如果我在之前和之后的NSLog消息AudioUnitUninitialize(toneUnit);,通知出现在它们之间.

iphone synchronization core-audio audio-converter remoteio

6
推荐指数
1
解决办法
760
查看次数

avconv:保存元数据的flac到ogg转换

我正在编写一个命令行工具,将具有各种格式的输入音乐库(flac/ogg/mp3/...)转换为给定格式的输出音乐库(flac/ogg/mp3).我将它基于avconv(或ffmpeg,如果avconv不可用),因为它是我发现的最完整的命令行转换器.我的脚本可从此URL(GitHub)获得:

https://github.com/biapy/howto.biapy.com/blob/master/various/mussync-tools

我正在尝试将元数据从输入库文件传递到输出/转换的库文件.

我想出了这段代码:

 local MAP_METADATA=' 0:g'
  # Specific needs for some input formats/
  case "${INPUT_FILE_MIMETYPE}" in
    'application/ogg' )
      # Get input metadata from first audio stream and direct it to global.
      MAP_METADATA=' 0:s:0'
      ;;

    * )
      # Do nothing.
      # MAP_METADATA=' 0:g'
      ;;
  esac

  # Specific needs for some output formats/
  local OUTPUT_OPTIONS=""
  case "${OUTPUT_FORMAT}" in
    'flac' )
      # No encoding options needed.
      ENCODING_OPTIONS=""
      ;;

    'ogg' )
      # Set vorbis as default codec for ogg.
      OUTPUT_OPTIONS="-codec:a libvorbis -f ${OUTPUT_FORMAT}" …
Run Code Online (Sandbox Code Playgroud)

bash ogg audio-converter flac avconv

6
推荐指数
1
解决办法
2309
查看次数

Java音频转换器api

我正在寻找一个全面的Java API,可以转换各种格式和比特率的音频.

例如WAV(6kHz至48kHz)L16 /音频--- TO --- WAV(RIFF标题)8KHz 8位单声道A-law/U-law AIFF(6kHz至48kHz)L16 /音频--- TO-- - WAV(RIFF标头)8KHz 8位单声道A-law/U-law

和其他语音音频格式.

关于音频转换的类似Java库的任何其他建议也受到欢迎.

java audio java-api audio-converter

5
推荐指数
1
解决办法
8315
查看次数

音频压缩不适用于Itunes Songs

我正在研究从媒体选择器中挑选歌曲并将数据发送到服务器的项目.我正在转换这首歌.它适用于普通歌曲(即不属于购买的歌曲的歌曲),对于购买的歌曲我收到错误.我整合了这个由apple(iPhoneExtAudioFileConvertTest)给出的样本.请帮我解决这个问题.

iphone itunes objective-c audio-converter

5
推荐指数
1
解决办法
256
查看次数

使用LAME将音频文件从.wav转换为MP3时出现问题

我正在尝试使用适用于iOS应用的LAME将Linear PCM音频文件(.wav)转换为MP3。我成功地做到了,除了一个问题,创建的MP3文件比原始的.wav文件小。对于30秒的wav文件,创建的MP3文件为27秒,最后3秒的音频被切掉。在5分钟的音频中,约30秒的音频被截断,生成MP3。

我不太确定是什么引起了这个问题,我已经尝试了一些更改,但没有任何效果。有人可以帮助我,将我推向正确的方向吗?

这是我为此使用的代码。

    int read, write;
    FILE *pcm = fopen([mergeFile cStringUsingEncoding:1], "rb");  //source
    fseek(pcm, 4*1024, SEEK_CUR);                                   //skip file header
    FILE *mp3 = fopen([mp3FilePath cStringUsingEncoding:1], "wb");  //output

    const int PCM_SIZE = 8192;
    const int MP3_SIZE = 8192;
    short int pcm_buffer[PCM_SIZE*2];
    unsigned char mp3_buffer[MP3_SIZE];

    lame_t lame = lame_init();
    lame_set_in_samplerate(lame, 44100);
    lame_set_VBR(lame, vbr_default);
    lame_init_params(lame);

    do {
        read = fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, pcm);
        NSLog(@"");
        if (read == 0)
            write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE);
        else
            write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE);



    } …
Run Code Online (Sandbox Code Playgroud)

audio lame audio-converter ios

5
推荐指数
1
解决办法
1043
查看次数

如何使用CoreAudio的AudioConverter实时编码AAC?

我可以找到的所有示例代码都AudioConverterRef集中在我预先拥有所有数据的用例(例如在磁盘上转换文件).它们通常调用AudioConverterFillComplexBufferPCM进行转换,然后将其inInputDataProcUserData填入回调中.(这真的是它应该如何使用?为什么它需要回调呢?)对于我的用例,我试图从麦克风流式传输aac音频,所以我没有文件,我的PCM缓冲区正在实时填写.

由于我没有*ioNumberDataPackets = 0预先拥有所有数据,所以我在输入数据输出后尝试进行回调,但这只是将AudioConverter置于需要进行AudioConverterReset()ted 的死亡状态,而我不会从中获取任何数据.

我在网上看到的一种方法是,如果我存储的数据太小,就会从回调中返回错误,只要我有更多数据就再试一次,但这似乎是浪费资源,我不能让自己尝试一下.

我真的需要做"重试,直到我的输入缓冲区足够大",还是有更好的方法?

audio aac core-audio audio-converter ios

5
推荐指数
1
解决办法
3956
查看次数

如何使用 Swift 在 iOS 中将音频 mp3 文件转换为原始音频类型?

在 iOS 中使用 Swift 将音频 mp3 文件转换为具有以下特征的音频类型 raw 的最有效方法是什么?

single-channel (monaural)
little-endian
unheadered
16-bit signed
PCM
sampled at 16000 Hz
Run Code Online (Sandbox Code Playgroud)

audio mp3 audio-converter ios

4
推荐指数
1
解决办法
902
查看次数

将 MP4 转换为 WAV

我正在用 Java 创建一个小型音频播放器,可以很好地播放某些格式(例如 WAV)。我发现这是因为javax.sound不支持MP4。但根据我所读到的内容,从 MP4 转换为 WAV 是无损的,所以我相信这应该不会那么困难。我知道有很多第三方库可以做到这一点,但我对下载一个应该相当简单的东西不感兴趣。我研究了每个 ISO 的具体情况,试图了解数据是如何存储的,以便能够创建一个 ISO BufferedReader,并BufferedWritter查看是否可以手动转换它,但我无法找到我正在寻找的信息。在纯 Java 1.7.0 中执行此操作的方法是什么(我知道 JavaFX 有一个 MediaPlayer,但不幸的是我无法使用 1.8.0)。

或者如果有人知道我可以在哪里找到组成 MP4 和 WAV 的每个特定容器信息(例如标头大小/信息、数据、ACK/NACK 等)。

java audio audio-streaming audio-converter

0
推荐指数
1
解决办法
2538
查看次数

使用 NAudio 将 PCM 48kHz/16 比特率的 wav 文件转换为 u-law 8kHz/8 比特率

我有一个 wav 文件,需要将其转换为我们的应用程序之一可以读取的格式。我要转换的文件格式为:

  • 编码:PCM
  • 采样率:48kHz
  • 比特率:16位
  • 频道:1

我想要转换成的可读文件格式是:

  • 编码:u-Law
  • 采样率:8kHz
  • 比特率:8 位
  • 频道:1

为了实现这一点,我使用NAudio库。我用于转换的代码大致如下:

using (WaveFileReader reader = new WaveFileReader(inputWavFilePath))
{
    WaveFormat newFormat = WaveFormat.CreateMuLawFormat(8000, 1);
    using (var conversionStream = new WaveFormatConversionStream(newFormat, reader))
    {
        WaveFileWriter.CreateWaveFile(outputWavFilePath, conversionStream);
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的转换会引发错误

AcmNotPossible 调用 acmStreamOpen

我已经看到了一些从 u-law 转换为 PCM 的链接,但在反向操作时遇到了麻烦。

我很难理解的是为什么当我转换时不会抛出PCM/48kHz/16bit -> uLaw/48kHz/8bit异常。但是,当我尝试将结果文件转换为抛出异常时。uLaw/8kHz/8bit

我是处理音频文件和不同格式的新手,所以如果我错过了一些简单的东西,我很抱歉。

有人可以解释一下为什么转换只在采样率转换时抛出异常,而不是在其他两个转换(编码PCM -> uLaw&& 16bit -> 8bit)时抛出异常吗?

c# naudio audio-converter

0
推荐指数
1
解决办法
6670
查看次数