Консультация № 119591
21.01.2008, 16:48
0.00 руб.
0 2 2
Здравствуйте уважаемые эксперты!Вы отлично помогли с прошлыми вопросами, огромное спасибо!Подобный вопрос я задал экспертам по API, но они не смогли ответить.Вопрос:Какие константы или типы (или еще чего) надо объявить в функциях mciExecute или mciSendString (а может в mciSendCommand) , что бы стала возможной запись звука в MP3 формате .Как устанавливается чистота, и бит/с. MSDN почитал, но там вроде только для С++, и мне не разобраться.Заранее спасибо.

Обсуждение

Неизвестный
22.01.2008, 00:02
общий
это ответ
Друзья, всё не так просто - mp3 - патентованный формат. И не микрософтовский - Fraunhofer-ский. http://www.iis.fraunhofer.de/EN/bf/amm/projects/mp3/
Т.о. декодинг - бесплатно, а энкодинг - за деньги. Вы можете прикупить права (как это сделали Lame, MS, MAD и прочие) на кодирование в mp3 в своих программах. Но тут я не спец. А срок действия патента истекает вроде в 2010.
Неизвестный
25.01.2008, 03:01
общий
это ответ
Здравствуйте, Sapozhnikov Vladimir!

Вот ссылки на описания и скачку библиотек который могут это делать. Большинство самплов под VS 2005 будут проблемы с конвертацией пишите что именно сыпеться разберемся пока что разберитесь с этим.

1) http://www.developerfusion.co.uk/show/62/ с линком на осх бибилиотеку
2) http://www.vbforums.com/archive/index.php/t-77296.html - с линокм на класс который работает со звуком и можно скачать.
3) http://www.ab-archive.com/Ukrainian/programmalle/english20075.htm - еще одна библиотека
4)http://www.gotdotnet.ru/Forums/DotNet3.0/517899.aspx - вот вопрос без ответа но с очень полезными кусочками кода
5) http://www.runweloads.com/cod/ - и здесь немеряно сторонних библиотек

а теперь немного о том же самом только для VB.6
1) http://msdn.microsoft.com/msdnmag/issues/06/01/AdvancedBasics/default.aspx?loc=ru
2) http://forum.codeby.net/topic20206.html?pid=94370&st=0&#entry94370 - ну еще кусок мануала) очень полезного
3) http://forum.codeby.net/topic20206s0.html?p=93934&#entry93934 вот еще чуток
И кое что я положил в приложение =) Из найденого на этих сайтах но то что меня впечатлило)
Regards
Max



Приложение:
‘Функция для проигрывания файлов в формате *.mp3Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As LongPrivate Sub Command1_Click()Call mciExecute("play C:\moi.mp3") ‘чтобы воспроизвести файлEnd SubPrivate Sub Command2_Click()Call mciExecute("close C:\moi.mp3") ‘чтобы закрыть файлEnd Sub=================Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As Long, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As LongPrivate Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As LongDim Temp2 As LongDim Temp1 As StringDim aFile As StringPrivate Function GetShortName(ByVal fFileName As String) As String Dim bufTxt As String * 261 Dim RetLen As Long RetLen = GetShortPathName(fFileName, bufTxt, 260) GetShortName = Left$(bufTxt, RetLen)End FunctionPrivate Sub Form_Load()aFile = "D:\Music\Test.mp3" ‘путь к mp3 файлуaFile = GetShortName(aFile)Temp1 = "play " & aFileTemp2 = mciSendString(Temp1, 0, 0, 0)End Sub===================\\вот вам пример листинга, проигрывающего mp3 с помощью DirectX (не забудьте подключить к проекту Active Movie Control Type Library (Проект (Project) -> Ссылки (Reference) это quartz.dll входящая в DirectX, а значит , во все винды последних поколений smile.gif и модуль )Код на форму:КодOption ExplicitPrivate Sub Form_Activate() ‘Change the file path of your mp3 in here. DirectShow_Load_Media "C:\YouFile.mp3" ‘путь до вашего mp3 ‘You don‘t need to do this part, but it‘s nice to be ‘able to control it. ‘------------------------------------------------ DirectShow_Volume 100 DirectShow_Balance 0 DirectShow_Speed 100 DirectShow_Set_Position 0, 0, 0, 0 ‘------------------------------------------------ DirectShow_PlayEnd SubPrivate Sub Form_Unload(Cancel As Integer) DirectShow_ShutdownEnd SubКод в модуль:КодOption ExplicitPrivate Const MAX_VOLUME As Long = 100Private Const MAX_BALANCE As Long = 100Private Const MAX_SPEED As Long = 226Public DirectShow_Event As IMediaEventPublic DirectShow_Control As IMediaControlPublic DirectShow_Position As IMediaPositionPublic DirectShow_Audio As IBasicAudioPublic Function DirectShow_Load_Media(File_Name As String) As BooleanOn Error GoTo Error_HandlerIf Right(File_Name, 4) = ".mp3" Then Set DirectShow_Control = New FilgraphManager DirectShow_Control.RenderFile (File_Name) Set DirectShow_Audio = DirectShow_Control DirectShow_Audio.Volume = 0 DirectShow_Audio.Balance = 0 Set DirectShow_Event = DirectShow_Control Set DirectShow_Position = DirectShow_Control DirectShow_Position.Rate = 1 DirectShow_Position.CurrentPosition = 0Else GoTo Error_HandlerEnd IfDirectShow_Load_Media = TrueExit FunctionError_Handler:DirectShow_Load_Media = FalseEnd FunctionPublic Function DirectShow_Play() As BooleanOn Error GoTo Error_HandlerDirectShow_Control.RunDirectShow_Play = TrueExit FunctionError_Handler:DirectShow_Play = FalseEnd FunctionPublic Function DirectShow_Stop() As BooleanOn Error GoTo Error_HandlerDirectShow_Control.StopDirectShow_Position.CurrentPosition = 0DirectShow_Stop = TrueExit FunctionError_Handler:DirectShow_Stop = FalseEnd FunctionPublic Function DirectShow_Pause() As BooleanOn Error GoTo Error_HandlerDirectShow_Control.StopDirectShow_Pause = TrueExit FunctionError_Handler:DirectShow_Pause = FalseEnd FunctionPublic Function DirectShow_Volume(ByVal Volume As Long) As BooleanOn Error GoTo Error_HandlerIf Volume >= MAX_VOLUME Then Volume = MAX_VOLUMEIf Volume <= 0 Then Volume = 0DirectShow_Audio.Volume = (Volume * MAX_VOLUME) - 10000DirectShow_Volume = TrueExit FunctionError_Handler:DirectShow_Volume = FalseEnd FunctionPublic Function DirectShow_Balance(ByVal Balance As Long) As BooleanOn Error GoTo Error_HandlerIf Balance >= MAX_BALANCE Then Balance = MAX_BALANCEIf Balance <= -MAX_BALANCE Then Balance = -MAX_BALANCEDirectShow_Audio.Balance = Balance * MAX_BALANCEDirectShow_Balance = TrueExit FunctionError_Handler:DirectShow_Balance = FalseEnd FunctionPublic Function DirectShow_Speed(ByVal Speed As Single) As BooleanOn Error GoTo Error_HandlerIf Speed >= MAX_SPEED Then Speed = MAX_SPEEDIf Speed <= 0 Then Speed = 0DirectShow_Position.Rate = Speed / 100DirectShow_Speed = TrueExit FunctionError_Handler:DirectShow_Speed = FalseEnd FunctionPublic Function DirectShow_Set_Position(ByVal Hours As Long, ByVal Minutes As Long, ByVal Seconds As Long, Milliseconds As Single) As BooleanOn Error GoTo Error_HandlerDim Max_Position As SingleDim Position As DoubleDim Decimal_Milliseconds As Single‘Keep minutes within rangeMinutes = Minutes Mod 60‘Keep seconds within rangeSeconds = Seconds Mod 60‘Keep milliseconds within range and keep decimalDecimal_Milliseconds = Milliseconds - Int(Milliseconds)Milliseconds = Milliseconds Mod 1000Milliseconds = Milliseconds + Decimal_Milliseconds‘Convert Minutes & Seconds to Position timePosition = (Hours * 3600) + (Minutes * 60) + Seconds + (Milliseconds * 0.001)Max_Position = DirectShow_Position.StopTimeIf Position >= Max_Position Then Position = 0 GoTo Error_HandlerEnd IfIf Position <= 0 Then Position = 0 GoTo Error_HandlerEnd IfDirectShow_Position.CurrentPosition = PositionDirectShow_Set_Position = TrueExit FunctionError_Handler:DirectShow_Set_Position = FalseEnd FunctionPublic Function DirectShow_End() As BooleanOn Error GoTo Error_HandlerIf DirectShow_Loop = False Then If DirectShow_Position.CurrentPosition >= DirectShow_Position.StopTime Then DirectShow_StopEnd IfDirectShow_End = TrueExit FunctionError_Handler:DirectShow_End = FalseEnd FunctionPublic Function DirectShow_Loop() As BooleanOn Error GoTo Error_HandlerIf DirectShow_Position.CurrentPosition >= DirectShow_Position.StopTime Then DirectShow_Position.CurrentPosition = 0End IfDirectShow_Loop = TrueExit FunctionError_Handler:DirectShow_Loop = FalseEnd FunctionPublic Sub DirectShow_Shutdown()Set DirectShow_Audio = NothingSet DirectShow_Event = NothingSet DirectShow_Control = NothingSet DirectShow_Position = NothingEnd Sub=============КодPrivate Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal _lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongConst SW_SHOWNORMAL = 1Private Sub Form_Load() ShellExecute Me.hwnd, vbNullString, "C:\312.mp3", vbNullString, "", SW_SHOWNORMALEnd Sub
Форма ответа