Python аудио из BytesIO конвертировать в моно и обратно в BytesIO

Есть стерео аудио файл, загруженный в BytesIO

Есть ли возможность сконвертировать его в моно и загрузить в другой BytesIO?

Видел конвертацию с помощью pydub:

from pydub import AudioSegment
sound = AudioSegment.from_wav("/path/to/file.wav")
sound = sound.set_channels(1)
sound.export("/output/path.wav", format="wav")

Но он не позволяет работать с file-like объектами


Ответы (1 шт):

Автор решения: Александр

Вот так может быть?

from io import BytesIO
from threading import Thread
from pydub import AudioSegment
from pydub.playback import play
import requests

def main():
    url = 'https://static.muzlo.cc/download/32185/Eminem_-_Crazy-In-Love.mp3'

    headers = {
        'accept-encoding': 'dentity;q=1, *;q=0',
        'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
        'cookie': '_ym_uid=1598301264972206367; _ym_d=1598301264;\
            _ga=GA1.2.588910291.1598301264; _gid=GA1.2.540363687.1598301264;\
            _ym_isad=2; _gat_gtag_UA_120812414_1=1',
        'sec-fetch-dest': 'audio',
        'user-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64)\
            AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36'}

    response = requests.get(url, headers, stream=True)
    length = response.headers['Content-Length']
    print(length)
    content = response.content

    mp3_sound = AudioSegment.from_mp3(BytesIO(content))
    # mp3.split_to_mono()
    mp3_sound.set_channels(1)

    wav_bytes = mp3_sound.export(BytesIO(mp3_sound.raw_data), format="wav")
    wav_sound = AudioSegment.from_wav(wav_bytes)

    # play(mp3_sound)

    play(wav_sound) # MONO
if __name__ == '__main__':
    main()
→ Ссылка