Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

При кодировании в MP3 отсутствует звук


Страницы:   1 2

VoVan ©   (2008-03-25 05:16:00) 

Всем привет. Столкнулся с такой проблемкой: при попытке преобразования миди в мп3 отсутствует звук при воспроизведении полученного мп3-файла, причем если сжимать в мп3 вав-файлы со звуком все в порядке. Пользовался bass.dll, bassmidi.dll, lame_inc.dll.


Сергей М.   (2008-03-28 00:22:00) [1]

Ну и на десерт совсем полный ништяк - mid-файл содержит единственный трек с текстовой караоке-секвенцией, а басс его преобразует в мп3, и плейер умудряется на полном серьезе пробухтеть этот мп3)

Жесть !)


Сергей М.   (2008-03-28 00:14:00) [2]


> нужно знать какие SoundFont использует bass


Да нихрена он никакие не использует - он не знает ни о каких SF вообще)

Чуть более сотни дерьмово семплированных "стандартных" GM-"балалаек" - вот печальный удел басса и печальный результат этого алгоритма)

Превратить же midi-конфетку в кучу wave-дерьма можно и безо всяких бассов.


Сергей М.   (2008-03-28 00:08:00) [3]

Так что не надо уже парить мозги ВоВанУ бассами и прочей иже с ней шнягой - челу для начала надо просто понять, что сама постановка вопроса не выдерживает никакой критики)


Efir   (2008-03-28 00:07:00) [4]

Скажу честно - незнаю. Для этого нужно знать какие SoundFont использует bass. С другой стороны если такого инструмента нет, то можно найти и загрузить соответствующий SoundFont.

p.s. Если я написал бред, сильно не ругайте )


Сергей М.   (2008-03-28 00:01:00) [5]

А вот еще пример : в mid-файле содержится SysEx-секвенция, известная лишь одной из моделей множества семейств множества midi-дивайсов.

Вопрос на засыпку - КАК твой "якобы работающий" алгоритм умудрится "конвертировать" не зная что не зная во что ?)


Сергей М.   (2008-03-27 23:22:00) [6]


> Вопрос автора стоял в перекодировании MID файла в mp3


Сама постановка вопроса есть ахинея.
Потому и ответ на него в любом случае  - такая же ахинея.


> Алгоритм я ему привёл, который у меня работает корректно


Что, твой алгоритм позволяет инструменту с GM-кодом, соответствующим grand piano, зазвучать в wav-ипостаси милицейским свистком ? Да еще и мгновенно ?

Да по тебе шнобелевская премия плачет !

Желаешь знать истину ?

Изволь)

Речь не пойдет ни о каком бассе и иже с ним поделках для формошлепов.

Речь пойдет об обязательныхэтапах достижения результата.

На огурцах он выглядит так:

1. Поток midi-данных поступает на вход указанного синтезирующего midi-устройства в реальномвремени.

2. midi-устройство, сконфигурированное в соответствии с конкретнымитребованиями пользователя, в реальномвремени генерирует (т.е. осуществляет синтез, или, если угодно, выполняет рендеринг) результирующий поток в формате, например, PCM.

3. Этот поток в реальномвремени м.б. захвачен средствами mixer-устройства и waveIn-устройства и сохранен в виде файла.

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


Efir   (2008-03-27 22:57:00) [7]


> Сергей М. ©   (27.03.08 22:46) [15]


Согласен, в теории и механизме я разбираюсь хреново.

Вопрос автора стоял в перекодировании MID файла в mp3. Алгоритм я ему привёл, который у меня работает корректно.


> Еще раз тебе говорю - я хочу, чтобы n-й трек некоей midi-
> композиции, хранящейся в mid-файле, в результирующем файле
> звучал так как я хочу, например, милицейским свистком, даже
> если пач там ссылается на Grand Piano в соответствии с GM.
>
>
> Вопрос тебе на засыпку - услышу ли я этот вожделенный свисток
> в результате работы твоего якобы "в принципе работающего"
> кода, который сгенерирует мне какой-то там якобы ожидаемый
> wav (или мп3 - монопенисуально в дан.контексте) и который
> я укажу к воспроизведению любому "в принципе работающему"
> плейеру ?


Это уже сложный вопрос. Откуда я знаю как работает BASS.
Я не гуру в этой области, но вопрос был и я ответил на него в силу своих знаний. Никто не мешает Вам меня поправить или привести свой вариант, в конце концов это форум.


Сергей М.   (2008-03-27 22:49:00) [8]

С тобой все ясно.
разговор закончен.


Efir   (2008-03-27 22:48:00) [9]

При получении хендла ф-цией BASS_StreamCreateFile, BASS сам сканирует файл и знает о нём всё.


Сергей М.   (2008-03-27 22:47:00) [10]


> объясните мне почему алгоритм работает?


Оно мне надо, тебе объяснять, если ты уперся рогом ?)


Сергей М.   (2008-03-27 22:46:00) [11]


> Efir   (27.03.08 22:32) [12]


Я тебе пытаюсь объяснить, что не следует тупо тыкать якобы работающими (что-то там якобы делающими, но непонятно что) примерами, демонстрируя при этом полнейшее дилетантство в теории и механизме происходящего при этом.

Вот и все)

Еще раз тебе говорю - я хочу, чтобы n-й трек некоей midi-композиции, хранящейся в mid-файле, в результирующем файле звучал так как я хочу, например, милицейским свистком, даже если пач там ссылается на Grand Piano в соответствии с GM.

Вопрос тебе на засыпку - услышу ли я этот вожделенный свисток в результате работы твоего якобы "в принципе работающего" кода, который сгенерирует мне какой-то там якобы ожидаемый wav (или мп3 - монопенисуально в дан.контексте) и который я укажу к воспроизведению любому "в принципе работающему" плейеру ?


Efir   (2008-03-27 22:43:00) [12]

Тогда объясните мне почему алгоритм работает???


Сергей М.   (2008-03-27 22:36:00) [13]


> непосредственно декодирование в PCM


А это вообще ахинея, если


> BASS_ChannelGetLength - размер данных (байт), но уже в виде
> PCM.


С какой луны свалился "размер", если "декодирование" еще и не начиналось ?

Да и само выражение "декодирование в PCM" есть ахинея, особенно когда речь идет об исходных данных в формате mid.


Efir   (2008-03-27 22:32:00) [14]


> Сергей М. ©   (27.03.08 22:00) [11]


Чесно говоря я не могу понять, что Вы мне пытаетесь объяснить. Приведённый алгоритм в принципе рабочий, а Вы пытаетесь доказать что он работать не должен.

Ладно с самого начала.

BASS_Init(-1, 44100, 0, Handle, nil); инициализация BASS'a

hStream:=BASS_StreamCreateFile(false, PChar(InFile), 0, 0, BASS_STREAM_DECODE); - получаем хэндл потока с флагом BASS_STREAM_DECODE, то есть воспроизводить мы ничего не собираемся.

BASS_ChannelGetLength(BassChan); - длина потока в байтах. Так уж получилось но BASS выдаёт длину WAVE DATA, и не ко мне вопрос почему так, а к un4seen.

BASS_ChannelGetData(BassChan, BufMIDI, SizeOfRead); - эта функция заполняет BufMIDI или значением FFT или WAVE DATA (в зависимости от третьего флага). Если Вы и мне не верите, то посмотрите примеры, посталяемые с библиотекой (например SampleVis).

beEncodeChunk - кодирание.


Сергей М.   (2008-03-27 22:00:00) [15]


> BASS_MIDI_StreamCreateFile - создание потока


Потока какихданных ? PCM ? MID ?


> BASS_ChannelGetLength - размер данных (байт), но уже в виде
> PCM


Они с какой луны свалятся ? Какой конкретно синтезатор сделал это чудесное превращение ? Как он умудрился сделать это мгновенно ?


> BASS_ChannelGetData - непосредственно декодирование в PCM


Откуда тогда взялся "размер данных (байт), но уже в виде
PCM", если "декодирование в PCM" начнется только сейчас ?


> beEncodeChunk - кодирование в mp3.


Да хрен бы с ним, с мп3)
тут дури и безо всяких мп3 по самое нехочу)


> При вызове BASS_ChannelPlay происходит воспроизведение,


Воспроизведение и есть процесс вывода на некий дивайс результатов синтеза.


> а нафих оно нам нужно, если происходит непосредственное
> кодирование


Какое такое "непосредственное" ?

У меня, к примеру, sf-совместимый чипсет, и я хочу получить результирующий поток, сгенерированный ЭТИМ чипсетом на основании КОНКРЕТНОГО саундфонта с КОНКРЕТНЫМИ его параметрами.

ОТКУДА ф-ции басса знают о том, какой саундфонт я выбрал и какие параметры синтеза мне нужны ?

Да ниоткуда !

Ни с какой луны он и в басс не свалятся  !

Басс будет толкать миди-поток в указанный мной синтез-дивайс (или дифолтный миди-дивайс - не знаю, да и по барабану оно), который сможет выполнить интересующий меня рендеринг не иначе как в РЕАЛЬНОМ РЕЖИМЕ ВРЕМЕНИ !

Так что горбатого ты тут лепишь, любезный)


Efir   (2008-03-27 21:21:00) [16]


> VoVan ©   (27.03.08 07:38) [7]


У меня нормально работает. Midi файлы я использовал те, которые в самой Windows XP есть.


> Сергей М. ©   (27.03.08 08:47) [8]


BASS_MIDI_StreamCreateFile - создание потока.
BASS_ChannelGetLength - размер данных (байт), но уже в виде PCM.
BASS_ChannelGetData - непосредственно декодирование в PCM.
beEncodeChunk - кодирование в mp3.


> Рендеринг (тот самый синтез) должен происходить при вызове
> BASS_ChannelPlay, а им здесь и не пахнет, как не пахнет
> и захватом стрима-результата рендеринга.


При вызове BASS_ChannelPlay происходит воспроизведение, а нафих оно нам нужно, если происходит непосредственное кодирование.

Прежде чем спорить, может просто проверить.


Сергей М.   (2008-03-27 10:42:00) [17]

Рендеринг (тот самый синтез) должен происходить при вызове BASS_ChannelPlay, а им здесь и не пахнет, как не пахнет и захватом стрима-результата рендеринга.

В то же время в строке

MIDILeng:=BASS_ChannelGetLength(BassChan);

полнаялажа.


Сергей М.   (2008-03-27 08:47:00) [18]


> Efir   (26.03.08 21:04) [6]


> это уже декодированные WAVE данные


Т.е. ты хочегь сказать, что синтез происходит при вызове ф-ции

BASS_MIDI_StreamCreateFile

?

В таком случае она должна работать по времени не меньше времени звучания всей midi-"композиции"..


VoVan   (2008-03-27 07:38:00) [19]


> Efir   (26.03.08 21:04) [6]


Посмотрите пожалуйста на вот такую программку
( выложил сюда: http://vovand.narod.ru/proga.rar)
не знаю где там можно было намудрить, но звука нет.


Efir   (2008-03-26 21:04:00) [20]


> Сергей М. ©   (26.03.08 08:27) [5]


И что в ней не то? BufMIDI - это уже декодированные WAVE данные.
Вообще всё должно нормально работать, если только автор не намудрил где-то в других местах программы.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо