python 保存numpy格式音频文件
时间: 2024-09-10 20:10:41 浏览: 24
在Python中,可以使用`numpy`库处理数组数据,而要保存音频文件通常需要`scipy.io.wavfile`模块。以下是如何将`numpy`数组转换为WAV格式并保存到文件:
```python
import numpy as np
from scipy.io import wavfile
# 假设你已经有了一个numpy数组audio_data,它包含了音频样本
# audio_data是一个形状为 (num_samples, num_channels) 的二维数组
# 如果单声道,num_channels 就是1;如果立体声,通常是2
# 音频采样率,比如44100 Hz
sample_rate = 44100
# 将numpy数组转换为WAV所需的格式
audio_data *= 32767 / np.max(np.abs(audio_data)) # 范围调整至 -32767 到 +32767(16位PCM)
# 写入wav文件
wavfile.write('output_audio.wav', sample_rate, audio_data.astype(np.int16))
相关问题
保存numpy.ndarray音频文件
保存 numpy.ndarray 音频文件通常涉及将数组转换为常见的音频格式,比如 WAV、MP3 或者 FLAC 等。你可以使用 Python 的 scipy 和 pydub 库来完成这个过程。以下是基本步骤:
1. 导入所需的库:
```python
import numpy as np
from scipy.io.wavfile import write
from pydub import AudioSegment
```
2. 创建或加载 numpy array 形状为 (frames, channels) 的音频数据。例如,(44100 * seconds, 1) 对应单声道,(44100 * seconds, 2) 对应立体声。
3. 将 numpy array 转换为 WAVE 格式:
```python
def save_numpy_array_as_wav(array, filename):
# 如果需要立体声,可以转置数组
if len(array.shape) == 2 and array.shape[1] > 1:
array = array.T
sample_rate = 44100 # 常见采样率
data = array.tobytes()
write(filename, sample_rate, data)
```
4. 使用 pydub 将 numpy array 转换为其他格式:
```python
def save_numpy_array_as_mp3(array, filename):
audio = AudioSegment.from_wav_bytes(array.tobytes())
audio.export(filename, format="mp3")
```
5. 调用函数并传入音频数据和文件名:
```python
# 示例,假设你已经有了名为 `audio_data` 的 numpy array
save_numpy_array_as_wav(audio_data, "output.wav")
save_numpy_array_as_mp3(audio_data, "output.mp3")
```
python 音频文件拼接
要在Python中拼接音频文件,可以使用SciPy库中的wavfile模块。以下是一个简单的示例代码:
```python
from scipy.io import wavfile
import numpy as np
# 读取音频文件
rate1, data1 = wavfile.read('file1.wav')
rate2, data2 = wavfile.read('file2.wav')
# 确保两个音频文件的采样率相同
if rate1 != rate2:
raise ValueError("两个音频文件的采样率不同")
# 将两个音频文件拼接在一起
merged_data = np.concatenate((data1, data2))
# 将拼接后的音频文件保存为新文件
wavfile.write('merged.wav', rate1, merged_data)
```
在这个示例中,我们首先使用`wavfile.read()`函数读取两个音频文件。然后,我们检查两个音频文件的采样率是否相同。如果不同,我们会抛出一个`ValueError`异常。最后,我们使用`numpy.concatenate()`函数将两个音频文件拼接在一起,并使用`wavfile.write()`函数将拼接后的音频文件保存为新文件。