[mp3文件,在iOS上使用swift时,用la脚转换后,播放wav文件的速度是原来的两倍

问题描述 投票:0回答:1

我正在编写一个有关在使用swift时使用la脚录制和转换音频的功能。

我使用AVAudioRecorder录制。wav,然后用lame转换为。mp3。在记录和转换之前,我还设置了设置。似乎可行,但是。mp3文件的播放速度是。wav文件的两倍。

这里是录像机设置:

    try session.setCategory(.playAndRecord)
    try session.setActive(true)

    recorder = try AVAudioRecorder(url: filePathURL, settings: [
                AVFormatIDKey: Int(kAudioFormatLinearPCM),
                AVSampleRateKey: 44100,
                AVNumberOfChannelsKey: 1,
                AVLinearPCMBitDepthKey: 16,
                AVEncoderAudioQualityKey:AVAudioQuality.high.rawValue
            ])

和转换功能:

    var read = 0
    var write = 0

    let pcm = fopen(m4aPath, "rb")
    fseek(pcm, 4*1024, SEEK_CUR)
    let mp3 = fopen(mp3Path, "wb+")

    let pcmSize = 8192
    let mp3Size = 8192

    let pcmBuffer = UnsafeMutablePointer<Int16>.allocate(capacity: Int(pcmSize*2))

    let mp3Buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: Int(mp3Size))
    let rate: Int32 = 128

    let lame = lame_init()
    lame_set_num_channels(lame, 1)
//         lame_set_mode(lame, MONO)
    lame_set_in_samplerate(lame, 44100)
//         lame_set_brate(lame, rate)
    lame_set_VBR(lame, vbr_default)
    lame_init_params(lame)

    repeat {
         read = fread(pcmBuffer, 2*MemoryLayout<Int16>.size, pcmSize, pcm)
         if read == 0 {
              write = Int(lame_encode_flush(lame, mp3Buffer, Int32(mp3Size)))
         } else {
              write = Int(lame_encode_buffer_interleaved(lame, pcmBuffer, Int32(read), mp3Buffer, Int32(mp3Size)))
         }

         print("write\(write)")
         fwrite(mp3Buffer, write, 1, mp3)

    } while read != 0


    lame_close(lame)
    fclose(mp3)
    fclose(pcm)         

任何帮助将不胜感激。谢谢〜

ios swift audio lame audio-converter
1个回答
0
投票

似乎您正在以44.1 kHz的频率进行录制,但随后您告诉mp3编码器音频是在22.05 kHz的情况下采样的。

如果要创建以22.05 kHz采样的mp3,则必须先重新采样。

或将lame_set_in_samplerate(lame, 22050)更改为lame_set_in_samplerate(lame, 44100)

© www.soinside.com 2019 - 2024. All rights reserved.