Что нового

Воспроизведение звукового файла с нужной частотой(Bass.dll)

Arei

Скриптер
Сообщения
938
Репутация
115
Здравствуйте, скажите как через Bass.dll воспроизвести файл с заданной частотой?Заранее спасибо.
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
Спасибо, но что вы дали это не то, мне нужно не просто воспроизвести, а воспроизвести именно с другой частотой звука.
 

damien2008

Осваивающий
Сообщения
178
Репутация
34
вот нашел английский UDF
http://read-only.autoitscript.com/forum/topic/83481-bass-function-library-sound-and-music-functions/
тут можно скачать с примерами:
ссылка

в примере нашел строку инициализации:
Код:
_BASS_Init(0, -1, 44100, 0, "")


я так понял 44100 то что нужно менять?
вот еще что нашел, залил на RGHOST:ссылка
там библиотека и консольное приложение, правда не знаю на чем, можно вписывать значения самому, на подобие:

если wav из архива подменить на mp3, с изминенным расширение, то тоже будет воспроизводить с другой частотой.
UDF большой, почитай, может что получится :smile:

в примере из справки:
Код:
#cs ----------------------------------------------------------------------------
 AutoIt Version: 3.3.8.1
 Author:         damien2008
#ce ----------------------------------------------------------------------------
#AutoIt3Wrapper_UseX64=n
#include <Bass.au3>
#include <BassConstants.au3>

;Declare Variables
Global $file, $MusicHandle, $song_length, $current, $percent

Global $playing_state = -1
;Open Bass.DLL.  Required for all function calls.
_BASS_STARTUP()


;Initalize bass.  Required for most functions.
_BASS_Init(0, -1, 44100, 0, "")

;Check if bass iniated.  If not, we cannot continue.
If @error Then
    MsgBox(0, "Error", "Could not initialize audio")
    Exit
EndIf

;Prompt the user to select a MP3 file
$file = @ScriptDir & "\1.mp3"

;Create a stream from that file.
$MusicHandle = _BASS_StreamCreateFile(False, $file, 0, 0, 0)

;Check if we opened the file correctly.
If @error Then
    MsgBox(0, "Error", "Could not load audio file" & @CR & "Error = " & @error)
    Exit
EndIf

;Iniate playback
_BASS_ChannelPlay($MusicHandle, 1)

;Get the length of the song in bytes.
$song_length = _BASS_ChannelGetLength($MusicHandle, $BASS_POS_BYTE)
While 1
    Sleep(20)
    ;Get the current position in bytes
    $current = _BASS_ChannelGetPosition($MusicHandle, $BASS_POS_BYTE)
    ;Calculate the percentage
    $percent = Round(($current / $song_length) * 100, 0)
    ;Display that to the user
    ToolTip("Completed " & $percent & "%", 0, 0)
    ;If the song is complete, then exit.
    If $current >= $song_length Then ExitLoop
WEnd

Func OnAutoItExit()
    ;Free Resources
    _BASS_Free()
EndFunc   ;==>OnAutoItExit


частоту 44100 заменить, конечно можно, только при воспроизведении эффекта ноль.
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
у меня вообще не воспроизводит пример.Можешь в архив засунуть, песню и dll и UDF которые использовал.
 

damien2008

Осваивающий
Сообщения
178
Репутация
34
вот:ссылка
значит там:
000.wav - переименованный 000.mp3
_000.wav - оригинальный 000.wav
запускаешь exe, вводишь число от ~1 до ~25000 - 44100 (это уже слышно)
и слушаешь..
исходника правда у меня нету...

если первых пару секунд заменить тишиной,
то примерно так можно менять частоту, плюс, все что можно прикрутить, гуи, там, этц...

Код:
AutoItSetOption("WinTitleMatchMode",2)
Run(@ScriptDir&'\freqtest.exe',@ScriptDir) ;
WinWait("freqtest.exe")
WinActivate("freqtest.exe")
Send('25000' & @CRLF)
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
Это да уже лучше, но это не вариант, надо более проверенный способ и менее изощрённый.
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
Тот скрипт,что ты показывал не работает на 7, кто может протестируйте.
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
ну я не 1 день автоит знаю, я бы догадался проверить.
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
скинь всё для версии скрипта, а не консоли.
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
У меня сразу Completed начинает заполниться и всё.
 
Верх