VS 2010 DirectSound - Streaming / Circular Buffer?
Feb 8, 2012
I use the following code (with Imports Microsoft.DirectX.DirectSound and Microsoft.DirectX) to play sound using an 8 second static buffer:
Dim SD As Device = New Device
SD.SetCooperativeLevel(Me.Handle, CooperativeLevel.Priority)
Dim MS As New IO.MemoryStream(Gbuffer) ' Gbuffer is byte array with properly formatted WAV data
Dim waveFormat As New WaveFormat
waveFormat.SamplesPerSecond = 44100
[Code] .....
What I would like to do next is to change to a "circular" or "streaming" buffer so that I can write new data "on the fly". I've done a lot of Googling but can't quite see how to adapt my present code to use a circular buffer. I can get the current write and play positions using Msb.GetCurrentPosition(iPlayPos, iWritePos) but how do I actually insert new data into the buffer? I have tried "manually" writing new data into my Gbuffer byte array but that doesn't work - I guess once a sound has been played through once, the data is cached somewhere and the contents of Gbuffer are not used again.
View 7 Replies
ADVERTISEMENT
Jul 13, 2011
where I'm going wrong with my circular DirectSound Capture buffer here? If I just capture sound into a big non-circular buffer it works fine, but with a 1 second (44100 bytes) buffer and a 100ms timer to poll the read position it goes haywire. No error messages, just long blocks of zeros with short bursts of valid data. calculation of the number of bytes to read and/or the read position.
Here is the code. gBuffer is defined elsewhere as a big byte array. In this example I am just trying to copy the captured sound data from the small temporary byte array (tempBuffer) into the big gBuffer byte array. Obviously this must be done so that every byte is read and copied into the byte array with no gaps or duplication of values. Timer1 is set to 100mS:
Dim McaptureBuffer As CaptureBuffer
Dim MiLastReadPos As Integer
Dim MiBufferOffset As Integer
[Code].....
View 2 Replies
Jun 8, 2012
I have been asked to improve the memory efficiency of an application that is used for high speed data acquisition. After running the VS memory profiler several times and scanning the projects for obvious issues I came to the following conclusion: despite using a fixed size circular buffer for storing acquired sample points, the RAM usage increases relative to the polling period. For example: polling data for one signal at 2 microseconds can use 5 times more memory (private bytes) than when running at 50 microseconds ... even though the buffer size is the same.
The circular buffer is an array of SamplePoint objects. Each of these objects contains an array of Shorts (16 bit) for corresponding data per signal and one date object (8 bytes) for the time stamp. For efficiency, the circular buffer is Redimmed only once every time it begins polling and filled with empty sample points which are then "assigned".
Also, it seems that when we stop and run the application it hogs even more memory each time as though the Redim is not releasing the previous array. My questions boil down to the following: What is most memory efficient way of implementing a circular buffer containing managed objects which have arrays?Also, how and why is memory usage increasing with a fixed size array with different polling speeds? Does the garbage collector not have time? Do local variables get disposed of IMMEDIATELY when a sub or function exits?These are some of the doubts and concerns that I would like to rule out before proceeding.
[Code]...
View 1 Replies
Feb 24, 2010
How can I create a circular buffer on the heap in VB.NET ? This would be used for audio playback via P/Invoke to winmm.dll waveoutopen and waveoutwrite to support development of a software synth. I currently use the marshall class to build a regular array of bytes in the heap.
View 1 Replies
Jul 31, 2010
I am using VB.net sockets to send a music file from one instance to another. It currently saves the file, but I do not want to be caught up in file-sharing, so I want to "save" it to a buffer, and when it gets to a particular percentage transferred, I want another thread to play the music file, deleting it from the buffer as it plays. I have the code to send it over the network, but I need to know how to keep it in a buffer and not save it as a file.
View 1 Replies
Jun 18, 2011
I am trying to follow some tutorials on using DirectSound in VB.NET and I need a reference to Microsoft.DirectX.DirectSound in my project. I have downloaded and installed the Microsoft DirectX SDK (June 2010) but after a restart I have no additional .NET references available to add to my project. I must be doing something really dumb
View 2 Replies
Apr 2, 2006
I want to know how I can take a regular avi, mpg, wmv, etc... with out a streaming server or a streaming file, and not downloading the entire movie Play it with windows media player or a different media player, oreven a custom one.
View 2 Replies
Nov 24, 2010
I am developing a software that catches streaming data. Unfortunately, there is no pattern or sequence on how this data comes in. So what I have initially done is to catch then write to my MS Access DB. Unfortunately, while writing to the DB, I am missing some data that is streaming since writing takes a little bit of time before it goes back to the catching syntax.
I am planning to multithread the DB writing then just call it from my main program. Do guys know any website/tutorial where I can learn the basics for multithreading? I am using Visual Studio 2010. Or if ever, does any one of you have a sample program where I can just learn from?
View 6 Replies
Dec 15, 2011
[Code]...
This is my code for retrieving pictures, it was working before but then i accidentally deleted the table and i created it again with the same name and same fields. and now whenever i open the form with the picture, there was a message box error. it says Buffer cannot be null. Parameter name: buffer I don't know what i did wrong.
View 5 Replies
Mar 28, 2012
change my MDIClient's background image I've decided that painting over it is the best way to go (because of scaling). Problem is, when the form (and the MDIClient) get scaled/resized, there's massive flicker even with the ControlStyles and form double buffering.
Public Class frmMain
Dim BGimage As Image
Sub New()
[code]....
View 10 Replies
Jul 21, 2011
What this code will do to the copy?
vb
Using source As New IO.FileStream("source path here", IO.FileMode.Open)
Using target As New IO.FileStream("destination path here", IO.FileMode.Create)
Const BUFFER_SIZE As Integer = 1024
Dim buffer(BUFFER_SIZE - 1) As Byte
[Code] .....
View 4 Replies
Sep 6, 2011
i am new to directsound. I was wondering if someone could point to a resource that explains how to load wav files and play them using directsound. I found one webpage that explains how to load wavs and play them but you load them by clicking a button and searching a window for the file; what I need is programmatic loading. I can't use simpler methods to play the wavs because I need multiple sounds playing at once and very fast execution times. If it isn't too difficult, perhaps someone could post some code.
View 4 Replies
Dec 18, 2010
I'm currently trying to Capture through DirectSound, I've been trying toying around with WaveLib(Ported to VB) but this is very confusing. Anyway, I cant figure out how I am supposed to do this and would like some assistance. The end goal of this project is to: Record Microphone > Encode with Speex Codec > Send over UDP > Decode > Play on Speakers
View 3 Replies
Aug 6, 2011
I have used DirectSound to play a wave file in my application using the function CreateSoundBufferFromFile. It works perfectly.Now I want to play files from a resource dll file. I have created 1n2v32.dll file having nearly 100 small wave files named 1,2,3... I can play them using LoadLibraryEx, PlaySound & FreeLibrary.Now, I am trying to use CreateSoundBufferFromResource function from DirectSound api to play these files. I get Run-time error '432': File name or class name not found during Automation operation I used the following code to create the buffer.
Set LDSB = LDS.CreateSoundBufferFromResource(App.Path & "1n2v32.dll", "14", BufferDesc, gw)
View 6 Replies
Nov 17, 2011
how to capture audio output with directsound? i'd want to be able to save it as .wav, .mp3, or .wma file format.
View 9 Replies
Apr 29, 2012
how can i create a buffer with BufferCaps.ControlEffects set to false in order to clone it? Here's the documentation
Public AudioData(7, 15) As SecondaryBuffer
Dim dev As New Device
Public Sub LoadAllData(ByVal ph As IntP
[code]....
View 2 Replies
Sep 16, 2009
So I was working in the forums and on the side bar of some thread I saw this link: [URL]...It turned out to be almost entirely about MIDI, but it made me think that I really need to share some code I wrote a few months ago and see if perhaps there is reason to create what the above thread really asked for.Here's a little background on the following code:
Back in April or so of this year I was doing some spring cleaning and came across the old Yahama PSR-6 synthesizer keyboard I had received one year for Christmas when I was around eight. I remember I used to like the Bagpipe voice because at the low notes it made a good fart sound. For a Toys-R-Us/Radio Shack model keyboard, running on six D-Cell batteries, produced in the early to mid eighties, that was an impressive achievement. LOL Anyway, I always did want to learn to play piano (or keyboard) so I decided to literally dust the thing off, put batteries in it, and fiddle around a bit. A couple YouTube videos later and I was convinced that I wanted to do this. While I was waiting for the thing to ship and arrive, I thought that it really shouldn't be that hard to take a DirectSound SecondaryBuffer object and inject it with sound data which whas calculated based on the harmonic values of musical notes, thereby creating your own synthesizer.
First, I really had little idea what I was doing when I first set about doing this other than the general structure of calculating byte data for notes and stuffing them into a SecondaryBuffer object while it played. I had used direct sound a number of times in a number of ways, but always playing sound data that came from a source (file, stream, etc.). This would be my first attempt at generating sound data for the buffer.
Second, I'm a "code-as-you-learn-learn-as-you-code" kinda guy, so that means that I developed the initial project as I went. I would research a specific portion of the project (and there was a LOT of research to do! lol) and then code it and move on to the next. Of course, this eventually leads to a mess of a project in most cases where the foundation is a bit complex to begin with. So the code I'm posting is the second version of the concept. But even at that, I'm only going to post the primary user control at this point and hold back on the code for the test application I created with it (I will provide a download to the compiled app however). After getting the user control cleaned up (if not ideally redesigned), the second app became a "develop-as-you-go" project for the test application - so it is a bit of a mess now too; but mostly just to look at code-wise - it actually runs pretty well.
Third, there are still a few design issues that could be improved upon in the user control, and a few choices which were made for ease of coding that could be changed for performance. But because of this, other than for a couple of routines, most of the code should actually be pretty straight forward to anyone who's comfortable in VB already.
Ok, on to the example: we are going to create a MusicKeyboard control. This control will draw itself like a pinao keyboard and will render keys for the specified number of full octaves. Clicking a key will play the associated note in the specified voice. Voices will be created using a simple digital oscillator and optional even-noise generator on top of a sine wave form.
To get started, you'll first need to have the DirectX SDK installed. The latest one is available here:[URL]..displaylang=en however the example was created using the version from March 09. There should be no impact from using the newer version.
Once you have the SDK installed, create a new Windows Application and add a new User Control named MusicKeyboard to the project. Note that you could create a Windows Class Library project, but I personally like to develop in an Application for ease of testing and later convert to a class library.You'll need to drag a BackgoundWorker component from the toolbox onto the usercontrol and name it "SynthWorker". Set the worker's WorkerSupportsCancellation property to True.
Now you'll need to add the DirectX reference to the project. You can rightclick the project in the solution explorer and select Add Reference or go to My Project and the References Tab. From the list of .Net references,add Microsoft.DirectX.DirectSound.That should be all we need to get started. In the following posts we'll create a bunch of code files and get the keyboard noise-worthy.Reed Kimble - "When you do things right, people won't be sure you've done anything at all"
View 8 Replies
Feb 14, 2009
I was wondering if anyone could point me to a really good tutorial on Directsound.I don't know if trying to digest an API is a good thing for a beginner but I really need something that has a beginner in mind.I especially liked some of the Microsoft video tutorials on VB.NET so perhaps they offer some on Directsound?The goal is to stream a WAV file, (not just "play it") and I want to LEARN the process.
View 3 Replies
Dec 24, 2009
I have to make a learning object program for a school project and i am doing it about circular motion and satellite orbits.how i can get a object to orbit around another object in visual basic, allowing the orbit radius to vary as the user inputs values?
View 2 Replies
Sep 1, 2011
Assuming an architecture as such.MODEL > BLL > DLL
Trying to implement lazy loading in my MODEL I have run into a circular dependency between my MODEL and BLL..Basically imagine a property in my model that I want to implement as follows
Public Readonly Property ProjectCategory As ProjectCategory
Get
If Me._ProjectCategory Is Nothing Then
Me._ProjectCategory = ProjectCategoryBLL.GetProjectCategoryByID(Me._ProjectCategoryID)
End If
[Code]...
I have my MODEL, BLL and DLL in separate projects and because of the fact that my BLL references my model I can not reference my BLL from my model as this would create a circular dependency.
View 3 Replies
Mar 22, 2011
How do I draw a circular gradient like this in vb.net?
View 1 Replies
Aug 24, 2009
my team is working on an application where we have to have one image which is acting as the base of all the elements on the screen.. and this same image has a transparency in the center. now this centre transparency is supposed to display a picture which will be captured from a web cam.currently everything working fine but the only problem which we are facing is that the picture is not proportionate to what is the actual resolution that it was shot at. it has been stretched from the top and bottom. the reason is that the imagebox which has been used to call this webcam display is a aquare.now it seems that the team is not being able to use the exact proportions of the image to call it in the picturebox for a reason that the final image needs to be cropped to fit in a circle.in simple words, i have a rectangular image and i want to draw a circle over this image. whatever is within the circle should be visible, whatever is outside the circle should be transparent. (a mask needs to be created...)but the only thing is that this circle will first display the image/video from the web camera and only once the picture is clicked, it should show the same picture within this circular area.
View 3 Replies
Jun 10, 2009
I have created a TextBox array where certain cells are assigned a number which I do not want the operator to change either intentionally or inadvertantly.The relevant TextBox cells are identified by their BackColor, (in this case LightBlue)If the cell is changed the original content is immediately assigned to the cell and a relevant message is displayed.My problem is that by changing the value back to its original value I create another TextChanged event and the consequence is that the MsgBox is displayed twice, one after the other.I have avoided the problem by not displaying a message box. The outward appearance is that the TextBox is not changed at all, which of course is my aim.However I would prefer to display a message box.An example of the scenario is shown below.
Another bewildering fact, (to me), is that in the example below, if the check is not made of the BackColor but instead the value of the TextBox the problem doesn't occur
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
If TextBox1.BackColor = Color.LightBlue Then[code]...
In the example above, if in the Text_Changed event handler the 'Remark' is changed from one 'If' statement to the other the differences in the result can be seen.
View 3 Replies
Oct 5, 2010
I'm working on creating my own sudoku solver to learn vb.net. I decided to have an element class which represents a single square in the puzzle. That element then has references to three lists which can be validated (no duplicate numbers). The three lists then would be its corresponding row/column/subGrid. Each list then holds a reference to 9 elements. Thus in my design an element has a reference to a list, which then holds a reference to that same element. Now vb.net will allow me to do this so I don't think it is the same issue that I saw when searching for solutions to circular referencing. However, I still wonder whether or not this is bad design.
View 2 Replies
Jan 31, 2010
Is it possible to create a circular visual basic form. I see plenty of tutorials on how to do this for VB6 but none on Visual Basic Express.
View 7 Replies
May 24, 2010
I have a button which opens FormTest. When FormTest opens, it creates an instance of ClassTest and that class instance takes the form instance that called it (FormTest) so that it can perform operations on FormTest from the ClassTest class instance. So i have a form which owns an instance of a class which has a reference to the form.
[Code]...
View 1 Replies
Feb 7, 2012
There is a question that I have from YEARS after working with DotNetBar Components that How do you set the Marquee style of a normal progress bar on the circular one? The circular progress bar from DotNetBar, i want to be clear.There is no "Style" Property and now I really need to know it for a project I'm doing now
View 3 Replies
Sep 1, 2010
I've got a requirement where I need to calculate a value, however also refer to this value when calculating it. So I've got for example[code]...
I can see how this can be achieved in excel using Circular Reference, however I'm not sure how I go about it when using VB.Net. Is there a similar method to create a Circular Reference as in excel or any other way I can possibly work out the TotalValue?
View 5 Replies
Apr 26, 2011
If I were to draw a rectangle with e.Graphics.FillRectangle(), how would I make a circular portion of the rectangle transparent?
View 1 Replies
Jun 19, 2012
I have a class that is in an assembly due to being required for other projects that I'm currently working on. One class lets call it Class Factory, creates a group of controls which require click event handlers to be attached, I have algorithms which determine polymorphic behavior based on certain features but that is relatively irrelevant.
Due to the event handler having to open up a specific form that isn't part of my assembly, and that form requiring this "Factory" class. Without creating circular reference is there any way I can essentially "delegate" the handler event for the form to define? As a simple work around I have had to maintain two separate classes, one in the project with the form and one in the assembly.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Width = 1500
Dim panel As New Panel
panel.Location = New Point(0, 0)
panel.Size = New Size(1000, 200)
[Code] .....
View 2 Replies