|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Programming with MP3 |
|
Programming with MP3
|
Ветеран Сообщения: 3320 |
Профиль | Отправить PM | Цитировать Народ, как оптимальнеэ всего сделать поддержку МР3 в своих програмах:
через MP3.h, MP3.ocx или другими способами(например хаudio.dll)? |
|
Отправлено: 00:31, 31-05-2004 |
Сообщения: 196
|
Профиль | Сайт | Отправить PM | Цитировать Admiral если тебе нужно просто проигрывать звуковые фрагменты, то значительно проще использовать формат wav. Не парься.
|
Отправлено: 20:31, 01-06-2004 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать Угу, особенно если они мелкие, в пределах ~2-5 (а может и более) секунд. К примеру, если присмотреться, то звуки Half-Life все в wav'ках.
|
------- Отправлено: 01:35, 03-06-2004 | #3 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать Kuper
Prisoner Имхо, человек собирается проигрывать музыку, а не звуковые эффоекты. Wav - это всё-таки от лени. Admiral Поскольку про язык программирования ни слова, посмотрите вот это. Мне вот интересно, когда же directx начнёт поддерживать vp3 напрямую |
Отправлено: 16:08, 03-06-2004 | #4 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать hasherfrog
Спасибо, но я хотел узнать как лучше для процессора, что б наименьше он грузился из-за этой музыки. Например когда играет Winamp там всего 1-2% а когда этот ТМеdiaPlayer целых 5%. Ассемблер не предлагать. Если на С то плеєр не так уж грузит процесор, но там долго писать, на Делфи намного быстрее и легче. Мож кто знает где можно достать SDK для хаudio.dll(кроме офицыального сайта)? |
|
Отправлено: 19:45, 03-06-2004 | #5 |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать hasherfrog, а ты "сожми" пятисекундную вафельку в mp3 и погляди процент "сжатия" . В теме малых вафель разговор не о лени, имхо.
|
------- Отправлено: 03:26, 04-06-2004 | #6 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать Чтобы подсунуть directX'у wav-ку, никаких телодвижений не нужно. А mp3 придётся пергнать в pcm, то есть нужен кодек, шмодек и ... начинающего программиста начинают посещать именно такие вопросы, какие задаёт Admiral. И Именно это я это имею в виду, когда говорю о лени. А то, что для звуковых эффектов целесообразнее использовать вавки, я не спорю - это было известно с древнейших времён, ещё с доса. Помню, откроешь файл с каким-нибудь экзотическим расширением - а там вавка без хидера. |
Отправлено: 09:56, 04-06-2004 | #7 |
Guest |
Есть вопрос как в программу зашить музыку - т.е. загружаешь программу и начинает проигрываться музыка (одна и таже по кругу), но не отдельным файлом, а в теле программы. Сам новичок пробую Delphi. Просто видел как-то кряк для какой-то программы (точно не помню какой), его запускаешь и начинает идти мызыка. Если кто знает как это сделать, подскажите, заранее спасибо.
|
Отправлено: 22:05, 04-06-2004 | #8 |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать Есть такая штука как ресурс, он компилируется компилятором ресурсов и потом прилинковывается к исполняемому модулю, таким образом программа может содержать в себе картинки и много чего еще.
Алгоритм в общем-то прост: 1) Создать rc-файл, он текстовый. 2) Попросить компилятор ресурсов (он входит в состав Дельфи) заняться его прямыми обязанностями: Если оный компилятор не найден, то ищите его в директории bin, что в директории куда ставили Дельфи. 3) Получившийся на выходе наш_файл.res необходимо "прилинковать" к проекту, для этого в каком-нибудь юните вставляете такую опцию компилирования 4) Про то как использовать ресурсы, как их находить читайте в справочной системе в стороне FindResource, LoadResource, LoadFromResourceName, LockResource, UnLockResource, FreeResource. |
------- Отправлено: 14:53, 05-06-2004 | #9 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать Много времени прошло после создания темы, а интереса к теме (по крайне мере у меня) не поубавилось.
Вот написанный мною пример на Visual Basic 6.0 с использованием мультимедийной библиотеки Bass (исп. версия 2.2, в настоящее время уже доступна 2.3). Option Explicit Dim A As Integer 'The number of song in list Dim B As String 'The time of sound Dim FName As String Dim C As Integer Const MaxTime = 65535 'Max of interval in timer Dim chan As Long Dim File As Long 'display error message Sub Error_(ByVal es As String) Call MsgBox(es & vbCrLf & vbCrLf & "error code: " & BASS_ErrorGetCode, vbExclamation, "Error") End Sub Private Sub Form_Load() 'Check if bass.dll is exists If (Not FileExists(RPP(App.Path) & "bass.dll")) Then Call MsgBox("BASS.DLL does not exists", vbCritical, "BASS.DLL") End End If 'Check that BASS 2.2 was loaded If (BASS_GetVersion <> MakeLong(2, 2)) Then Call MsgBox("BASS version 2.2 was not loaded", vbCritical, "Incorrect BASS.DLL") End End If If (Not FileExists(RPP(App.Path) & "play.ini")) Then Call MsgBox("play.ini does not exists.", vbCritical, "play.ini") End End If File = FreeFile Open "play.ini" For Input As File Do Until EOF(File) Line Input #File, B List1.AddItem (B) Loop Close File 'initialize BASS If (BASS_Init(-1, 44100, 0, Me.hWnd, 0) = 0) Then Call Error_("Can't initialize device") End End If ' If (Not PlayFile) Then 'start a file playing by calling the PlayFile pushing ' BASS_Free ' End 'End If Play.value = True 'start a file playing by pushing the play button End Sub Private Sub Form_Unload(Cancel As Integer) Call BASS_Free End End Sub Private Sub Nx_Click() If A = List1.ListCount - 1 Then A = 0 Else A = A + 1 End If Play.value = True End Sub Private Sub Play_Click() Timer1.Enabled = False Text1.Text = List1.List(A) If (Not PlayFile) Then 'start a file playing - call PlayFile function BASS_Free End End If End Sub Private Sub Prev_Click() If A = 0 Then A = List1.ListCount - 1 Else A = A - 1 End If Play.value = True End Sub Function PlayFile() As Boolean On Local Error Resume Next 'if Cancel pressed... Call BASS_StreamFree(chan) 'Call BASS_MusicFree(chan) chan = BASS_StreamCreateFile(BASSFALSE, List1.List(A), 0, 0, 0) 'If chan = 0 Then chan = BASS_MusicLoad(BASSFALSE, List1.List(A), 0, 0, 0, 0) If chan = 0 Then Call Error_("Selected file couldn't be played!") PlayFile = False 'Can't load the file Exit Function End If Call BASS_ChannelPlay(chan, BASSFALSE) B = BASS_ChannelBytes2Seconds(chan, BASS_ChannelGetLength(chan)) B = Left(B, InStrRev(B, ",") - 1) B = 1000 * B + 1000 Label1.Caption = B CheckTime Timer1.Enabled = True FName = GetFileName(List1.List(A)) Text1.Text = Left(FName, InStrRev(FName, ".") - 1) PlayFile = True End Function Private Sub Stp_Click() Timer1.Enabled = False Call BASS_ChannelStop(chan) End Sub Private Sub Timer1_Timer() If C = 1 Then CheckTime Else: Timer1.Enabled = False 'C = 0 Nx.value = True End If Label1.Caption = B End Sub '-------------------------- ' some useful functions :) '-------------------------- 'check if any file exists Public Function FileExists(ByVal fp As String) As Boolean FileExists = (Dir(fp) <> "") End Function 'RPP = Return Proper Path Function RPP(ByVal fp As String) As String RPP = IIf(Mid(fp, Len(fp), 1) <> "\", fp & "\", fp) End Function 'get file name from file path Public Function GetFileName(ByVal fp As String) As String GetFileName = Mid(fp, InStrRev(fp, "\") + 1) End Function 'check Time Public Sub CheckTime() If B > MaxTime Then B = B - MaxTime C = 1 'Tell timer that i use big time Timer1.Interval = MaxTime Else: Timer1.Interval = B C = 0 End If End Sub Так вот, обратите внимание на функции таймера Dim A As Integer 'Количество песен в списке Dim B As String 'Время песни Dim C As Integer Const MaxTime = 65535 'Max of interval in timer ... B = BASS_ChannelBytes2Seconds(chan, BASS_ChannelGetLength(chan)) B = Left(B, InStrRev(B, ",") - 1) B = 1000 * B + 1000 `получаем длину композиции в миллисекундах и округляем до секунды (+1000) ... Private Sub Timer1_Timer() If C = 1 Then CheckTime Else: Timer1.Enabled = False 'C = 0 Nx.value = True End If Label1.Caption = B End Sub ... Public Sub CheckTime() If B > MaxTime Then B = B - MaxTime C = 1 'Tell timer that i use big time Timer1.Interval = MaxTime Else: Timer1.Interval = B C = 0 End If End Sub Естественно средне статическая песня играет значительно больше. Так вот, я узнаю в сколько раз больше она играет, и сохраняю данное значение в переменной. А таймер каждый интервал, будет проверят, не пора ли переключится на следующую песню. А так как интервал (кроме последнего, а иногда и первого, если песня короче 65535 мс) достаточно велик, то и нагрузка на CPU будет достаточно либеральна. P.S. До этой реализации я использовал mp3.ocx производства Vision Factory, который можно скачать вместе с примером. Во времена создания темы меня устраивал, но теперь увы требования по серьёзней. Там естественно никакого таймера не надо было придумывать. У объекта мр3.осх есть событие SongPlayed() которое и отвечает за конец песни. Достаточно написать где NX. кнопка на следующую песню (см исх выше). |
Отправлено: 03:56, 25-12-2006 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
так возможно? wav--> mp3--> wav(качество mp3) --> mp3(качество как у mp3 предыдущего) | ALEXEY_DFD | Видео и аудио: обработка и кодирование | 4 | 19-12-2009 21:57 | |
MP3 | Kaschey3k | Общий по Linux | 16 | 10-05-2004 02:24 | |
COM и mp3 | 2003slon | Программирование и базы данных | 1 | 26-12-2003 02:51 | |
Gtk/qt programming | VlD | Программирование и базы данных | 2 | 12-04-2003 07:46 | |
programming | Proekt | Общий по Linux | 8 | 25-11-2002 04:15 |
|