Получение сообщения «Система не может найти указанный файл» при преобразовании MIDI в mp3 с использованием Mido и pydub


import mido
from pydub import AudioSegment

def midi_to_mp3(midi_path, mp3_path):
    # Load MIDI file
    midi = mido.MidiFile(midi_path)

    # Create an empty list to store notes
    notes = []


    for track in midi.tracks:
        # Iterate through MIDI messages in track
        for msg in track:
            # Check if message is a note on event
            if msg.type == 'note_on':
                # Add note (pitch, velocity, time) to notes list
                notes.append((msg.note, msg.velocity, msg.time))


    tempo = 120
    duration = 1000

 
    segments = []

   
    for note in notes:
        pitch, velocity, time = note
        # Calculate duration of note based on tempo and time
        note_duration = int(duration * (mido.tick2second(time, midi.ticks_per_beat, tempo) * 1000))
        # Create audio segment for note
        segment = AudioSegment.silent(duration=note_duration)
        segments.append(segment)

    
    audio = sum(segments)

   
    audio.export(mp3_path, format = "mp3")


midi_to_mp3("melody.mid", "output.mp3")

This is the full error message:

C:\Dipika\Study\musicrypt\env\Scripts\python.exe "C:/Program Files/JetBrains/PyCharm 2023.1.3/plugins/python/helpers/pydev/pydevd.py" --multiprocess --qt-support=auto --client 127.0.0.1 --port 56448 --file C:\Dipika\Study\musicrypt\musicrypt.py 
Connected to pydev debugger (build 231.9161.41)
C:\Dipika\Study\musicrypt\env\Lib\site-packages\pydub\utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
  warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
C:\Dipika\Study\musicrypt\env\Lib\site-packages\pydub\utils.py:198: RuntimeWarning: Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work
  warn("Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work", RuntimeWarning)
Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm 2023.1.3\plugins\python\helpers\pydev\pydevd.py", line 1496, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Program Files\JetBrains\PyCharm 2023.1.3\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:\Dipika\Study\musicrypt\musicrypt.py", line 70, in <module>
    convert_to_mp3('melody.mid', 'audio.mp3')
  File "C:\Dipika\Study\musicrypt\musicrypt.py", line 46, in convert_to_mp3
    midi_audio = AudioSegment.from_file(midi_path, format = "midi")
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Dipika\Study\musicrypt\env\Lib\site-packages\pydub\audio_segment.py", line 728, in from_file
    info = mediainfo_json(orig_file, read_ahead_limit=read_ahead_limit)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Dipika\Study\musicrypt\env\Lib\site-packages\pydub\utils.py", line 274, in mediainfo_json
    res = Popen(command, stdin=stdin_parameter, stdout=PIPE, stderr=PIPE)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python312\Lib\subprocess.py", line 1026, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python312\Lib\subprocess.py", line 1538, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Program Files\JetBrains\PyCharm 2023.1.3\plugins\python\helpers\pydev\_pydev_bundle\pydev_monkey.py", line 585, in new_CreateProcess
    return getattr(_subprocess, original_name)(app_name, patch_arg_str_win(cmd_line), *args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [WinError 2] The system cannot find the file specified
python-BaseException

Process finished with exit code 1

Я пытаюсь преобразовать текст в мелодию, используя библиотеку music21, которая, к сожалению, выдает на выходе формат среднего файла. Я не могу воспроизвести этот средний файл ни через один веб-браузер. Вот почему я попытался преобразовать файл Mid с помощью библиотек Mido и pydub. Но каждый раз, когда я запускаю это, моя система выдает ошибку «Система не может найти указанный файл». У меня есть файл melody.mid по тому же пути, что и файл Python.

Я ожидал получить в конце mp3-файл.

Когда вы запускаете скрипт Python, находитесь ли вы в его каталоге в качестве текущего рабочего каталога? Когда скрипт запускается и ищет «melody.mid», он ищет относительно вашего текущего рабочего каталога, а не местоположения скрипта Python.

nigh_anxiety 17.04.2024 20:53

@nigh_anxiety да, я нахожусь в текущем рабочем каталоге. Я также попытался указать полный путь. Но все равно получаю ту же ошибку. Похоже, это как-то связано с библиотеками, которые я использую. Все еще отлаживаем!!

Dipika Sengupta 18.04.2024 15:20

Не могли бы вы опубликовать полное сообщение об ошибке и проследить вопрос?

nigh_anxiety 18.04.2024 15:22
ffmpeg и ffprobe являются частью программного пакета, который представляет собой обычное программное обеспечение для вашего компьютера, а не библиотеку Python. Вот почему вы видите Popen в трассировке стека — библиотека Pydub пытается запустить эту программу как отдельную программу и записать ее выходные данные. Его необходимо установить отдельно. Подробности смотрите в связанном дубликате. Кстати, описанная здесь проблема не имеет ничего общего с mido.
Karl Knechtel 20.04.2024 03:31
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы получаете эту ошибку, потому что вы не установили дополнительные зависимости, не относящиеся к Python, для библиотеки pydub. pydub использует дополнительные программы, установленные в вашей системе для кодирования/декодирования различных форматов аудиофайлов. Как указано в инструкции по установке пакета :

Установить pydub легко, но не забудьте установить ffmpeg/avlib (следующий раздел в этом документе).

Из раздела Зависимости той же документации:

Вы можете открывать и сохранять файлы WAV с помощью чистого Python. Для открытия и сохранения файлов, отличных от WAV, например mp3, вам понадобится ffmpeg или libav.

Существует дополнительный набор инструкций специально для настройки ffmpeg, если это необходимо. ffmpeg — это библиотека по умолчанию, которую pydub пытается использовать, если не может определить, какая библиотека установлена.

Другие вопросы по теме

Похожие вопросы

Как эффективно рассчитать корреляцию Пирсона между соответствующими столбцами двух двумерных массивов?
Изменение порядка dict с индивидуальным порядком
Очень странно: другой вывод tzlocal.get_localzone() на основе псевдонимов Python3?
Как я могу заставить драматурга ждать, пока не появится определенный файл cookie (а затем вернуть его) в Python?
CS50 Python Week3, заданный вопрос «Устарело» — как отклонить ввод вместо повторного запроса
Использование списка списков индексов для разрезания столбцов и получения длины вектора по строкам
Объедините триггер Blob, ввод и вывод в 1 функцию Azure v2 (Python)
Найдите минимальную и максимально возможную сумму для заданного числа из целочисленного массива
Предоставление шестнадцатеричных значений цвета для тепловой карты Plotnine
Ошибка типа: ufunc 'isnan' не поддерживается для типов ввода – при выполнении U-теста Манна-Уитни