как читать количество каналов без ffmpeg или wave? - PullRequest
1 голос
/ 24 апреля 2020

Этот код работает:

import wave

f1 = wave.open(file1, "r")
num_channels_file1 = int(f1.getnchannels())

, но он не работает при чтении файла WAV с битрейтом diff или другим свойством. Я не могу понять разницу между wav-файлами или другими сложностями, мне просто нужен способ проверить, имеет ли wav-файл 2 канала.

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

SOX , " Швейцарский армейский нож программ обработки звука ", также опция:

from sox import file_info

ch = file_info.channels("WAV_2MG.wav") # https://file-examples.com/wp-content/uploads/2017/11/file_example_WAV_2MG.wav
print(ch)
# 2

Python Установить

pip3 install sox

Убедитесь, что SOX установлен в системе, если нет:

apt-get install sox # ubuntu
yum install sox # redhat/fedora/centos
1 голос
/ 24 апреля 2020

Количество каналов - это двухбайтовое целое число в позиции 0x16 в заголовке RIFF, поэтому вы можете просто прочитать его напрямую:

import struct

with open(file1, 'rb') as f1:
    header_beginning = f1.read(0x18)
    num_channels_file1, = struct.unpack_from('<H', header_beginning, 0x16)

Если вы заинтересованы в поддержке файлов WAV с прямым порядком байтов (что, я думаю, необычно), вы можете обнаружить их, прочитав первые четыре байта файла («RIFF» или «XFIR» для little-endian, и «FFIR» или «RIFX» для big-endian). Затем для файлов с прямым порядком байтов переключитесь с '<H' на '>H' при чтении количества каналов.

...