繁体   English   中英

Python:PCM音频操作-使用结构时左声道嘈杂

Python: PCM audio manipulation - noisy left channel while using struct

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

这是我的第一个代码。 我编写了一个程序,该程序必须使用幅度调制概念来处理未压缩的PCM文件。

我现在面临的问题是我在右声道获得正确的音频输出,而在左声道获得完整的噪声。

我知道立体声PCM文件的交错格式,如果我想在两个通道上调制声音,我只需要处理每个样本。 有什么建议吗? 这是我的代码:

import threading
import pyaudio
import struct
import numpy as npy
import wave

CHUNK = 1  # Number of samples to read
modulator_frequency: float = 12800.0  # Modulation frequency in Hz

# input_file = input(r"Specify *.wav audio file: ")
# data = wave.open(input_file, "rb")

data = wave.open("walk on air.wav", "rb")

pya = pyaudio.PyAudio()  # Load PyAudio module

audio_stream = pya.open(format=pya.get_format_from_width(data.getsampwidth()),
                        channels=data.getnchannels(),
                        rate=data.getframerate(),
                        output=True)


def play_stream():
    bytestream = data.readframes(CHUNK)

    t = 1  # Iterating sample number

    while bytestream:  # Play until bytestream ends
        x = struct.unpack(b'<i', bytestream)[0]  # Convert b'\x01\x00\xfd\xff' to some friendly numbers
        # print(x)
        y = int(x * npy.sin(2 * npy.pi * modulator_frequency * t / data.getframerate()).astype(npy.float32))
        # y = x
        t += 1
        z = struct.pack(b'<i', y)  # Convert friendly numbers back to bytestream
        # print(bytestream, " ---> ", x, " ---> ", y, " ---> ", z)
        bytestream = data.readframes(CHUNK)
        audio_stream.write(z)


if data.getsampwidth() == 3:
    sample_type = "24 Bit Integer PCM"
elif data.getsampwidth() == 2:
    sample_type = "16 Bit Integer PCM"
elif data.getsampwidth() == 1:
    sample_type = "8 Bit Integer PCM"
else:
    sample_type = "Unknown - {}".format(data.getsampwidth())

print("Format:", sample_type)
print("Number of audio samples:", data.getnframes())
print("Number of audio channels:", data.getnchannels())
print("Duration:", round(data.getnframes() / data.getframerate(), 3), "Seconds")
print("Sample rate:", data.getframerate(), "Hz")

threading.Thread(play_stream()).start()

print("Playback ended successfully.")

audio_stream.stop_stream()
audio_stream.close()
pya.terminate()
问题暂未有回复.您可以查看右边的相关问题.
3 从Linear PCM提取音频通道

我想从LPCM原始文件中提取声道音频,即提取立体声LPCM文件的左右声道。 LPCM为16位深度,交错,2通道,litian字节序。 根据我的收集,字节的顺序为{LeftChannel,RightChannel,LeftChannel,RightChannel ...},由于它是16位深度, ...

4 将pcm转换为.wav-嘈杂

我一直在尝试向应用程序中添加一些代码,以将记录的pcm文件转换为.wav文件。 我已经有了编写标题的代码,但是由于某种原因,当我通过音频播放器播放转换后的.wav文件时,您只能听到杂音。 这是我的转换方法的代码: 从我可以在网上找到的所有示例中,此标头应该是正确的。 如果有 ...

5 使用python将G.729音频转换为PCM

我正在处理以G.279编码的wav文件,需要通过在ubuntu服务器上运行的python代码将它们转换为PCM LE16。 到目前为止,我已经尝试过ffmpeg和scikit.audiolabs,但它们都无法读取音频文件。 在python中将G.279转换为PCM格式的最佳方法是什么? ...

6 从嘈杂的音频python中检测2个频率

我有一个AM无线电正在传输两个频率之一:1047hz或2093hz我试图录制音频并使用python来确定正在播放的频率(每个信号长1秒)。 问题是音频非常嘈杂,特别是在800-1000hz范围内,它干扰了我获得正确的信号。 如何滤除噪音? 这是我的代码: ...

8 如何将AVAssetTrack中的音频通道转换为PCM?

我正在尝试构建一个MTAudioProcessingTap来重新混合视频文件的环绕声。 为了使它起作用,无论源格式是什么,我都需要能够将每个通道转换为PCM。 你们知道我如何识别每个声道(弄清楚左边,中间,左环绕等)并将一个转换器连接到每个声道,以便它在我的MTAudioprocessi ...

9 用AudioTrack播放PCM有点吵

我从服务器套接字获取GSM字节数组中的音频数据,我正在使用此 GSMDecoder将其解码为PCM并播放。 解码器在长度为33字节数组中获取gsm数据,并返回长度为160 int数组。 首先(在for循环中),我将GSM字节数组切成33的长度,并交给解码器。 解码器返回的值是pcm i ...

10 从MPG123输出中提取左声道PCM数据

我正在使用MPG123库将MP3解码为PCM数据。 我想将FFT应用于PCM数据,特别是左声道。 mpg123_read函数使用PCM数据填充char数组。 如何从此char数组中提取左声道的PCM数据? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM