Что нового

Проигрывание звук. файла не имея кодеков в системе

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
До сих пор обходился стандартными функциями _Sound*, но недавно потребовалось воспроизводить файлы необычных форматов.

Известно, что _SoundPlay плохо справляется с некоторыми mp3 файлами в которых неправильно заданы теги, пример такого файла.
Если у файла удалить теги (или пересохранить), то проигрывается без проблем, но в моём случае файлы нельзя трогать (копировать и затем удалять/пересохранять тоже не вариант - медленно).

Вот и задумался, какие есть варианты решения проблемы? :scratch:
Думал использовать библиотеку Bass, но без кодеков в системе она отказывается у меня работать.


P.S.
Вот пример для файла выше:

Код:
#include <Sound.au3>

$hSound = _SoundOpen(@ScriptDir & '\Bach_Joke.mp3')
_SoundPlay($hSound, 0)
Sleep(2000)
_SoundStop($hSound)
_SoundClose($hSound)
 

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Только сегодня поднял тему, попробуй.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
CreatoR

DirectShow_Player
http://www.autoitscript.com/forum/topic/121555-directshow-player/?p=843790
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Astel064 [?]
Только сегодня поднял тему, попробуй.
Тему естественно видел (я все темы вижу ;)), но вопрос в том, на что полагается объект MPlayer.OCX.7...


WSWR [?]
Неплохо, но опять таки, мне нужно решение которое не будет полагаться на системные ресурсы, ну или свести это к минимуму.

К примеру Aimp плеер имеет свои (встроенные) кодеки, в частности там используется (по крайней мере в предыдущих версиях) библиотека Bass, вот мне бы её как то использовать...
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
CreatoR
Я проверял DirectShow_Player на компьютере, на котором кодеки не установлены - работает. Там же объект WMP играет этот файл - и скорее всего, это наиболее универсальный способ.

Вообще стараюсь пользоваться KMPlayer тоже со встроенными кодеками.

Если кодеки присутствуют, то DirectShow_Player, действительно, будет подхватывать их - это касается, в первую очередь, видеоформатов, т.е. один и тот же скомпилированный скрипт на одном ПК играет файл, на другом - нет.

А про Bass я думал, что она независима от системы, там и так столько всего...
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
WSWR [?]
Я проверял DirectShow_Player на компьютере, на котором кодеки не установлены - работает
Вопрос только на какой, т.е где имеется поддержка данного объекта, и поддерживаются ли все используемые в библиотеке свойства данного объекта...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Не знаю, может я и не в тему влез, но хочу посоветовать одну замечательную штуку - LAV Filters. После ее установки вы забудете про кодеки как класс. Проигрывает практически все и не зависит от плеера: mkv, flv, flac, monkey и т.д. Я теперь даже перешел на встроенный WMP. Кроме того, есть как x86, так и x64 версии.

Еще одна редкая, но очень полезная утилита для просмотра и настройки установленных кодеков - RadLight Filter Manager.


Добавлено:
Сообщение автоматически объединено:

CreatoR сказал(а):
Известно, что _SoundPlay плохо справляется с некоторыми mp3 файлами в которых неправильно заданы теги, пример такого файла.

А у меня нормально играет. Сдается мне, что проблема не в функции, а в кодеке.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
WSWR [?]
Я проверял DirectShow_Player на компьютере, на котором кодеки не установлены - работает.
Кодеки это движок проигрывания/декодирования файлов, теоретически без кодека не должно работать вообще. А работает потому что по умолчанию система проигрывает файлы, а значит имеет свои стандартные кодеки.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
хочу посоветовать одну замечательную штуку - LAV Filters. После ее установки вы забудете про кодеки
Это хорошо, но что если на системе нет возможности ничего устанавливать?

у меня нормально играет
Но тот же Aimp проигрывает этот же трек без проблем, у него встроенные кодеки.
Вот я хочу также, чтобы моя программа не полагалась на системные кодеки.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
CreatoR, у тебя проблема в кодеке, а не в "плохом" файле. Как сказал AZJIO, без кодека ничего проигрываться не может. Самый простой путь, это проверить этот файл на чистой системе. Если он будет проигрываться, то значит дефолтный кодек в твоей системе был заменен или изменен приоритет на него. В этом случае особо напрягаться не стоит. Если файл не будет проигрываться, то найди в сети другой кодек и приложи его к программе.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
CreatoR

Сейчас добрался до чистой XP Sp3

Файл воспроизвели только объект WMP и взятый для примера скомпилированный Audiometer.au3 на основе Bass.dll
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
Самый простой путь, это проверить этот файл на чистой системе
У меня и есть чистая система, проверял также на виртуалке.

найди в сети другой кодек и приложи его к программе.
Не уверен что понимаю, как приложить кодек к программе...

WSWR [?]
Файл воспроизвели только объект WMP и взятый для примера скомпилированный Audiometer.au3 на основе Bass.dll
Можно увидеть этот пример, и откуда бралась dll'ка, у меня ни одна имеющаяся версия не работает.
Из библиотеки Bass.au3 примеры тоже не работают, пишет "Could not initialize audio".
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
CreatoR сказал(а):
Не уверен что понимаю, как приложить кодек к программе...

http://www.free-codecs.com/LAME_DirectShow_Filter_download.htm
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
CreatoR

Брал вроде здесь http://www.autoit.de/index.php?page=Thread&postID=215291#post215291
Tам в "examples" пример Audiometer.au3

Честно говоря, я и сам путаюсь в этих UDF, их слишком много...

Код:
#include <Bass.au3>

Global $sFile = FileOpenDialog('Open...', '..\audiofiles', 'playable formats (*.MP3;*.MP2;*.MP1;*.OGG;*.WAV;*.AIFF;*.AIF)')
If @error Or Not FileExists($sFile) Then Exit

_BASS_STARTUP()
_BASS_Init(0, -1, 44100, 0, '')

$MusicHandle = _BASS_StreamCreateFile(False, $sFile, 0, 0, 0)
_BASS_ChannelPlay($MusicHandle, True)

While _BASS_ChannelIsActive($MusicHandle)
	Sleep(10)
WEnd

_BASS_Free()
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Оказалось что проблема с Bass.au3 заключается в не поддержке x64, добавил в скрипт
Код:
#AutoIt3Wrapper_UseX64=n

и всё заработало.

Тема решена, всем спасибо!
 
Верх