Skip to content

Instantly share code, notes, and snippets.

@weimeng23
Last active April 12, 2023 02:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save weimeng23/6de255e7fde924700dfa98bc91ce25fb to your computer and use it in GitHub Desktop.
Save weimeng23/6de255e7fde924700dfa98bc91ce25fb to your computer and use it in GitHub Desktop.
read raw pcm & wav in several method
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : read_wav_pcm.py
# Author : Meng Wei <wmeng94@gmail.com>
# Date : 23.03.2023
# Last Modified Date: 23.03.2023
# Last Modified By : Meng Wei <wmeng94@gmail.com>
import librosa
import numpy as np
import soundfile as sf
import wave
print('------------read wav test------------')
wav_path = './1550500309979161_37470_38160.tmp.wav'
print('librosa read wav')
waveform, sr = librosa.load(wav_path, sr=16000)
data1 = waveform
print(waveform, sr, waveform.shape)
print('wave read wav')
f = wave.open(wav_path)
params = f.getparams()
print(params)
nchannels, samplewidth, framerate, nframes = params[0:4]
bytes_data = f.readframes(nframes)
# print(bytes_data)
data2 = np_data = np.frombuffer(bytes_data, dtype=np.int16)/32768.0
print(np_data, np_data.shape)
print('soundfile read wav')
f = sf.SoundFile(wav_path)
data3 = f.read(dtype=np.float32)
print(data3, data3.shape)
print('------------read pcm test------------')
pcm_path = './output.pcm'
f = open(pcm_path, 'rb')
bytes_data = f.read()
# print(bytes_data)
data4 = np_data = np.frombuffer(bytes_data, dtype=np.int16)/32768.0
print(np_data, np_data.shape)
print((data1 == data2).all())
print((data2 == data3).all())
print((data3 == data4).all())
@weimeng23
Copy link
Author

weimeng23 commented Mar 23, 2023

1550500309979161_37470_38160.tmp.wav == output.pcm + wav_header

Input File     : '1550500309979161_37470_38160.tmp.wav'
Channels       : 1
Sample Rate    : 16000
Precision      : 16-bit
Duration       : 00:00:00.69 = 11040 samples ~ 51.75 CDDA sectors
File Size      : 22.2k
Bit Rate       : 257k
Sample Encoding: 16-bit Signed Integer PCM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment