Hello,
you can implement a method like "Beep (frequency, duration, volume)" that works by creating the sound directly in the buffer without having any audio files. Also is there a chance to run Midi files with UOS? Thanks in any case |
Administrator
|
>
Hello. Do you want a new method Beep(frequency, duration, volume) ? It is possible to do it with AddFromSynth(). It is in the todo list. Fre;D |
Hello,
ok thanks, i did not see AddFromSynth () meantime.. i was inspired by seeing these: http://openal.996291.n3.nabble.com/Waveform-and-queued-buffers-td5047.html https://gitlab.vanderhoning.net/mvdhoning/doal/blob/master/Tutorials/17/Unit1.pas I was thinking of something like that: procedure TTestClass.LoadBeep; Const dim = 22050; Var i, input,output: Integer; thebuffer: array of cfloat; thebufferinfos: TuosF_BufferInfos; begin SetLength(thebuffer,dim); for i:= 0 to dim-1 do thebuffer[i]:= Round(100 * Sin(i * (2 * pi) / 50.0) + 128); with thebufferinfos do begin SampleRate := 44100;//44100 div 4 SampleRateRoot := SampleRate; SampleFormat := 0;//float Channels := 1;//mono Filename := ''; Title := ''; Copyright := ''; Software := ''; Artist := ''; Comment := ''; Date := ''; //Tag := ; Album := ''; //Genre := ; //HDFormat := ; //Sections := ; //Encoding := ; //bitrate := 192*1000; //Length := ; LibOpen := 0; Ratio := 2; end; input:= uos_AddFromMemoryBuffer(line,thebuffer,thebufferinfos, -1, -1); if input = -1 then raise Exception.Create(''); output:= uos_AddIntoDevOut(line,-1,-1, uos_InputGetSampleRate(line,input), uos_InputGetChannels(line,input), 0,-1); if output = -1 then raise Exception.Create(''); uos_InputSetLevelEnable(line,input, 2); //uos_InputAddDSPVolume(line,input, 1,1); ??? end; But i can not change the volume (maybe there is a mistake): if you enable the line "???" i do not hear the sound properly (on Windows 10). Also there is probably something that can be improved (thebufferinfos values, ..) Can you do something like using AddFromSynth ()? The idea would be to avoid Sleep () for the duration of the beep (seen in the example "consolesynth" that uses AddFromSynth ()). PS. Using a Beep () method you could use the "morseTL" example without audio files Thank You |
Administrator
|
Hello. There is consolesynth.pas demo to show how to use it. Did you try with the consolesynth.pas demo ? Here no problems. Fre;D |
Hello,
It is ok. I would like to try a solution without using "sleep ()" for the duration of the sound. I tested LoadBeep; In linux it does not output the beep then with or without the line "uos_InputAddDSPVolume" you get the same result. In Windows 10 without "uos_InputAddDSPVolume" I get the correct beep while with "uos_InputAddDSPVolume" fails (like linux). Is this a bug? Thanks |
Administrator
|
Hello. OK, I will test it asap (I am overbooked now ). Thanks to note it. Fre;D |
Administrator
|
In reply to this post by Phoenix
I did not try yet to use uos_InputAddDSPVolume() for synthesizer but why not using simply : InputSetSynth(InputIndex: cint32; Frequency: float; VolumeL: float; VolumeR: float; Enable : boolean); // Frequency : in Hertz (-1 = do not change) // VolumeL : from 0 to 1 (-1 = do not change) // VolumeR : from 0 to 1 (-1 = do not change) // Enabled : true or false ; If you only want to change the volume, just do: InputSetSynth(InputIndex, -1, VolumeL, VolumeR, true); PS: I will chek uos_InputAddDSPVolume() for synthetizer ASAP. Fre;D |
Hello.
Certainly, as a second alternative i will use InputSetSynth(). Changing volume does not cause any problems.
Note: in my "LoadBeep", uos_InputAddDSPVolume() is for uos_AddFromMemoryBuffer() not for uos_AddFromSynth() Thanks |
Administrator
|
Ha, OK. (I did not understood that ) Huh... asap. Fre;D |
Administrator
|
This post was updated on .
In reply to this post by Phoenix
Hello Phoenix.
In your code: thebuffer[i]:= Round(100 * Sin(i * (2 * pi) / 50.0) + 128); ---> you rounded the data (to get integer ?). But in thebufferinfos: SampleFormat := 0;//float So it could not work. Try to use float data (from -1 to 1) or SampleFormat > 0 (int32 -->.SampleFormat = 1, int16 -->.SampleFormat = 2) PS: In last commit 3e05121..698958b , added Duration parameter for AddFromSynth() / InputSetSynth(). You may define now the duration of the synth sound. Fre;D |
Hello,
I did not control the range for audio data: my stupid error. Windows 10 also works with incorrect data: it's sad I've changed scale [-1..1] is now working, thanks for the added "duration" parameter. Thanks so much!! |
Administrator
|
Yep, I am happy that it works. In very last commit 698958b..b6e8af7, if duration = 0 ---> endless wave. Fre;D |
Free forum by Nabble | Edit this page |