How get one channel of data from two-channel audio file?

I need to either convert a 2-channel audio file to 1-channel or else get just one channel of data (does this lose some sound?) for a calculation. How would I do that?

In terms of a loop over byte[] data, double[] left, double[] right...
8-bit mono
for (int i = 0; i < data.length; i += 1) {
     left[i] = (double)data;
16-bit monofor (int i = 0; (i*2) < data.length; i++) {
left[i] = ((double)data[2*i] << 8) + (double)data[(2*i)+1]);
8-bit stereofor (int i = 0; (i*2) < data.length; i++) {
left[i] = (double)data[2*i];
right[i] = (double)data[(2*i)+1];
16-bit stereofor (int i = 0; (i*4) < data.length; i++) {
left[i] = ((double)data[2*i] << 8) + (double)data[(2*i)+1]);
right[i] = ((double)data[(2*i)+2] << 8) + (double)data[(2*i)+3]);

Similar Messages

  • SaveToFile example modificati​on to get data from two channels simultaneo​usly.

    We are trying to modify the “SaveToFile” example for C++. This particular example comes with NI-scope 2.9.1 and some other versions. This example collects data from one channel and saves the output as a text file. Also, we are using NI PCI-5112 DAQ.
    However, it can be modified to get data from channel 0 and channel 1 at the same time. There is a help file called “Fetching Multiple-Record Acquisitions”, which is under the NI-High speed digitizer help topics. This confirms that you can modify the code to get data from two channels and the output will be a text file where every other value is from one channel. This help file also gives some code. However, it is not very much helpful to us, please keep in mind that we have only taken a basic course in C++.
    Our project is to analyze the data, however, we need to acquire the data before we can analyze. We have spent so much time trying to get the data.  What we need to do is get data from both channels simultaneously and output the data as a text file.
    Can anyone help us to modify the code so it can get data from both channels simultaneously? Or can anyone help as where we can get more information? Or does anyone know of any sample examples that will take data from two channels simultaneously and output the data as a text file or any other type of document.
    Any help will be really appreciated, as we have spent so much time trying to acquire the data.
    Thanks.

    Hi Finomad,
    Please see this post for an answer to your question.
    Regards,
    Natasa

  • How to delete a single data from table using control file

    I want delete a single row data from table using sql loder control file
    Edited by: 977940 on Dec 19, 2012 9:00 PM

    977940 wrote:
    I want delete a single row data from table using sql loder control file
    Edited by: 977940 on Dec 19, 2012 9:00 PMWhy?
    And how do you imagine this happening with sqlloader?
    The entire purpose of sqlloader is to load data (hence, the name sql*loader*) into a table from an external source. If you want to delete rows from a table, you use the sql DELETE statement.
    What is the business problem you are trying to solve?

  • Easy Custom device tool - how to get actual waveforms or data from a channel

    I want to use a custom device to do the simulation for my system, but I am not sure how to get channel data to it?  I am using a cRio 9024, and 6 modules for signal input and signal output.  I did the walk through, but it is not connecting to channel data.  Any thoughts?
    Attachments:
    Add.zip ‏164 KB

    Sorry that my previous response was so brief - I didn't have the opportunity to take a look at your code last Friday (and on top of that, I poorly worded my question about running your code in LabVIEW).
    You would want to include logic to communicate with your cRIO in the Execute VI - you don't need to add anything to the Channel Data or System Data controls to get the data into your custom device. If you're using the Scan Engine, this would mean just dragging and dropping Scan Engine IO variables into the Execute VI and then operating on the data you read out of them. Now, if you want to pass data out of the custom device to other parts of VeriStand, you would need to add items to Channel Data for each value you want to pass out of the custom device.
    When I mentioned running your code in LabVIEW, the idea I was trying to get at is creating a separate test project to verify that the logic you have implemented in your Execute VI works apart from the custom device architecture. Now that I've had a chance to take a look at your code, I see that the logic to communicate with the cRIO hasn't been implemented yet. As such, that original suggestion doesn't make sense - sorry for the confusion.
    Also, just so you're aware, you'll need to modify your custom device project to allow the custom device to be compiled for a VxWorks target. To do so, add your cRIO to the project as a new target and then copy all of your custom device files to the cRIO controller. You'll also need to make some modifications to the build specification to get everything to compile correctly.
    Finally, I also notice that in your init VI, you don't pass a file path to the Open/Create/Replace file VI, which will likely cause some problems when you try to run the device.
    Regards,
    Ryan K.

  • How to get one day back data from selecting date .

    Hi Experts,
                   Iam using DB2 database .How to see one day back of selected date . i tried by using prompts .
    Date=(@prompt('Mssg','D',,mono,free)-1 days)   Date is a date object and i applied prompt for date . butting i'm facing error . so kindly help me to over come this issue .
    Regards
    Dinesh

    first capture Date on univers by simply using your formula
    Date=(@prompt('Mssg','D',,mono,free))
    Now to get the previous date i.e 1 day back date
    create another variable called
    back_Date = (Date - 1 Day)
    Thanks,
    Swapnil

  • How can I quickly sample data from 200 channels using DAQmx?

    Hello,
    I am trying to sample thermocouple data using a SCXI 1000 chassis with two SCXI 1100 modules and one SCXI 1102B, all of which have a 1300 isothermal terminal block. The computer I am using has a PCI-6052E DAQ card and 1 GB of RAM. I will eventually need to upgrade to a SCXI 1001 chassis with enough modules to collect about 175-200 different signals. The problem is I am testing with just the 96 channels I have available and the program runs super slow, with the maximum sample rate only .026 Hz. Currently I have all the channels being read by one DAQmx VI. I've looked through the example programs and tutorials, but nothing there deals with large numbers of channels. Is there a way to improve the sample rate to around 1 Hz with so many channels?
    Thanks in advance

    Check the filter configuration for your SCXI-1100.  The product page says that if you set the filter for 4Hz, you'll only get 3 Samples/second.  The slowest module in the chassis determines the sample rate.  If one of your modules is configured that way, you'll get a maximum rate of approximately 3 hz / 96 channels = 0.031 hz/channel, which is pretty close to what you've reported.  The filter is set by a jumper on the module, see the manual under "filter selection."
    You might want to look at "Determining Maximum Scan Rate for Multiple SCXI Modules" as well.

  • How does one combine the history from two different profiles, so that my current profile will show both my old and my new history

    No details

    You can't do that.
    The best that you can do is to copy and paste the history items to a bookmarks folder and export the bookmarks to an HTML file.
    Then you can import that file in the other profile.
    If both profiles are on the same computer and are open at the same time then you can use the clipboard to do the C&P.
    http://kb.mozillazine.org/Opening_a_new_instance_of_Firefox_with_another_profile

  • How can I tell if signals from two devices are truly synchronised?

    Hi there,
    How does one check that signals from two devices (two separate devices in a single X-series chassis) that should be synchronised actually are?   I am using a PXIe6361 and PXIe4331 on a PXIe-1073, with Labview 2001 SP1 64-bit. All devices are using the Sample Clock from the 4331 device, and an AI Start Trigger, so they should be synchronised.
    I thought that writing the signal data to file and checking the time stamp for each column of data would be the most accurate, but I have been told that timestamps are software created and therefore don't reflect the actual time that the signals were acquired by the hardware.  When I do this, the timestamps vary by up to 150ms which is larger than I expected.
    If I set the x-axis of the waveform graphs (on the GUI) to "Time" then it appears that the first data sample is taken at different times for the two plots (one plot per device).
    If I set the x-axis of the waveform graphs (on the GUI) to "Ignore time stamp" (so that the x-axis just starts from 0 rather than a date-time) then the first data point occurs at "0" for both graphs. However, I'm not sure that this reflects the actual alignment of the signal.
    What is the best way to check if signals collected on different devices in the same chassis are actually synchronised?
    Thanks,
    Claire.

    Hi Lynn,
    Thanks for your help and for sending the demo.
    I understand the concept of how the signals will look if they're not synchronised and your demo shows that nicely. I guess I have been perplexed by someone else telling me that the timestamps in the output file (and following from that I assume timestamps on a waveform graph) do not give an indication of whether signals are synchronised. The reason they gave for this was that the timestamps are manufactured by the software, not the DAQ hardware.  They suggested that I put the setting "ignore waveform timestamps" on my waveform graphs, and then check that both signals come in at the same time (i.e. both start at zero), but I'm not convinced about this. 
    When I use an analog trigger, neither the timestamps in my output file or on the two waveform graphs are synchronised. If I don't use the trigger, then there is far less disparity in the timestamps in the output file. I've attached two output files here, and my VI.
    This is my first attempt to synchronise a voltage module and a strain gauge module on an X-series chassis, so I want to make sure that I'm achieving the best synchronisation that I can, and the difference in behaviour with and without the trigger worries me.
    Thanks,
    Claire.
    Attachments:
    without trigger.txt ‏5 KB
    with trigger.txt ‏6 KB
    Multi-Device Synch-Analog Input-Finite Acq-Analog Start_Claire_wDigitalin_12June2012 PTbridge.vi ‏196 KB

  • How to modify the VB examples in ni-scope to sample data simultaneously from two channels in PCI 5922?

     Dear all:
    I want to write VB programs to sample data simultaneously from two channels in PCI 5922. The niscope driver has some example VB programs to sample data from one channel, for example, the "save to file ", the program works well to sample the data from one channel.  When I modify it to sample data simultaneously from two channels, I always get error so I seek your help on how to write the program to sample two channels simulatenously. Thanks.  I attached the sample program here and what I tried to modify is the "channel name" and "waveform()"
    Regards
    Andy
    Attachments:
    savetofile.doc ‏42 KB

    Hi Bajaf, regarding the FFT of the four channels, the next link might be what your looking for:
    http://digital.ni.com/public.nsf/allkb/862567530005f09c8625671b00739970
    Respect the phase issue how are you doing the acquisition of the signals, are you doing two independent acquisitions? if you are controlling them as independent acquisitions try to synchronize them with triggers and the clock.
    How much are they out of phase?
    By the way we know have forums in Spanish
    Best Regards
    Benjamin C
    Senior Systems Engineer // CLA // CLED // CTD

  • From two given tables, how do you fetch the values from two columns using values from one column(get values from col.A if col.A is not null and get values from col.B if col.A is null)?

    From two given tables, how do you fetch the values from two columns using values from one column(get values from col.A if col.A is not null and get values from col.B if col.A is null)?

    Hi,
    Use NVL or COALESCE:
    NVL (col_a, col_b)
    Returns col_a if col_a is not NULL; otherwise, it returns col_b.
    Col_a and col_b must have similar (if not identical) datatypes; for example, if col_a is a DATE, then col_b can be another DATE or it can be a TIMESTAMP, but it can't be a VARCHAR2.
    For more about NVL and COALESCE, see the SQL Language manual: http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions119.htm#sthref1310
    I hope this answers your question.
    If not, post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) for all tables involved, and also post the results you want from that data.
    Explain, using specific examples, how you get those results from that data.
    Always say which version of Oracle you're using (e.g., 11.2.0.2.0).
    See the forum FAQ: https://forums.oracle.com/message/9362002

  • How to calculate the phase difference between two square wave (acquired from two channel in one DAQ)

    Hello everyone ,
     I need a quickly help that as below :
    I am trying use PCI-6220 to acquired six signals from one rotation encoder (channel A, channel B,channel Z ,and their non-signals) .The encoder out signals will be square wave and 4000pulses per revolution. I set it rotation at 300rpm speed. I need show every square wave of six out channels in waveform and measure the A-B phase difference to check if the value is correct (designed value should be 90deg) .
    I have no idea how to measure or calculate the phase difference of two square wave base on synchronizate to acquire these two square wave from two channel on the PCI-6620....
    Anyone can give a idea how to calculate the phase difference with two square wave ?
    Thank a lot and Thanks again...
    Tim

    Tim,
    Here is a simple rising edge detector for one channel.
    Lynn
    Attachments:
    Rising edge.vi ‏15 KB

  • How to upload the data from two sheets in one excel into SAP

    Hi experts,
                    My requirement is to upload the data from two sheets in an excel into an internal table.How can this be achieved.Is some OLE application has to be used?
    Thanks
    Abhishek

    Hi
    see this program will upload excel file to application.
    *& Report  ZSD_EXCEL2
    REPORT  ZSD_EXCEL2.
    types: begin of ttab ,
          fld1(30) type c,
          fld2(30) type c,
          fld3(30) type c,
          fld4(30) type c,
          fld5(30) type c,
          end of ttab.
    data: itab type table of ttab with header line.
    selection-screen skip 1.
    parameters: p_file type localfile default
                'C:\test.xls'.
    selection-screen skip 1.
    at selection-screen on value-request for p_file.
      call function 'KD_GET_FILENAME_ON_F4'
           exporting
                static    = 'X'
           changing
                file_name = p_file.
    start-of-selection.
      clear itab. refresh itab.
      perform upload_data.
      loop at itab.
        write:/ itab-fld1, itab-fld2, itab-fld3, itab-fld4, itab-fld5.
      endloop.
    * Upload_Data
    form upload_data.
      data: file type  rlgrap-filename.
      data: xcel type table of alsmex_tabline with header line.
      file = p_file.
      call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
           exporting
                filename                = file
                i_begin_col             = '1'
                i_begin_row             = '1'
                i_end_col               = '200'
                i_end_row               = '5000'
           tables
                intern                  = xcel
           exceptions
                inconsistent_parameters = 1
                upload_ole              = 2
                others                  = 3.
      loop at xcel.
        case xcel-col.
          when '0001'.
            itab-fld1 = xcel-value.
          when '0002'.
            itab-fld2 = xcel-value.
          when '0003'.
            itab-fld3 = xcel-value.
          when '0004'.
            itab-fld4 = xcel-value.
          when '0005'.
            itab-fld5 = xcel-value.
        endcase.
        at end of row.
          append itab.
          clear itab.
        endat.
      endloop.
    endform.

  • Loading consolodated data from two excel files / cube into one infocube

    Hi Friends,
    I am receiving data from two sources:
    Source 1:
    Customer Product  Location                          Keyfig(Budget)
    C1            P1          L1                                     100
    C2            P1         L1                                      200
    C1           P2          L1                                      300
    Source 2:
    Product     Location                        KeyFig (Actual)
    P1               L1                                           320
    P2               L1                                           350
    I want to combinedata from two sources (or cubes) into one cube as follows:
    Customer      PRoduct       location          Budget            Actual
    C1                 P1                 L1                  100                 320
    C2                 P1                L1                   200                 320
    C1                P2                L1                   300                   350
    I tried by creating multiple data sources / infosources / transformations / updates rules and also tried with both DSO and cube. But the records are always getting updated as follows:
    Customer      PRoduct       location          Budget            Actual
    C1                 P1                 L1                  100                 320
    C2                 P1                L1                   200                 320
    C1                P2                L1                   300                   350
                        P1               L1                                           320
                       P2               L1                                           350
    Can you help me figure out if this is possible? If yes, how can I do it.
    Thanks a lot in advance.

    Hi,
    Please use the below approach.
    Load the budget data in ODS1.
    Load the actual data in ODS2.
    Create a ODS3 with same structure as ODS1 with additional key figure for Actuals,which will get data from ODS1. Here add a look up based product and location to populate actuals.
    Start Routine
    SELECT * FROM ODS2 into ITAB
    FOR ALL ENTRIES in SOURCE_PACKAGE.
    Transformation Routine:
    Read table ITAB  into WATAB
    with key location = <source_fields>-Location
    product =  <source_fields>-Product.
    If sy-subrc = 0.
    RESULT = WATAB-ACTUAL.
    ENDIF.
    -Vikram

  • How can i control NI-6115 to collect data from 2 channels and save as 2 files?

    I want to program NI-6115 card to collect data from 2 channels and save the two data into two different filenames that i specified?
    How do i write in labview codes?

    Calibur,
    LabVIEW includes a number of examples that demonstrate how to acquire analog input data and write it to disk. Dependent upon the type of file you would like to use, I would suggest that you examine one of the following examples:
    Cont Acq to File (binary).vi
    Cont Acq to File (scaled).vi
    Cont Acq to Spreadsheet File.vi
    With regards to writing each channel's data to a separate file, you will need to use the Index Array function to generate two 1-D arrays, each containing data for one channel. These arrays can then be written to separate files using two Write File functions.
    Good luck with your application.
    Spencer S.

  • Writing data from two different acquisition rates into one file

    Hi,
    I'm using a compactRIO, and I have an anemometer outputting data at 4Hz to the serial port on the controller, and I am using a 9237 module to read strain from two channels at 40Hz. I would like to record all this data in one file, but I'm unsure how to have the data points match up with respect to time since they are read at different rates. Basically I have 10 strain data points for every one anemometer data point, but that one data point needs to somehow be associated with the other 10 read in the same amount of time. It would be okay to "extend" the slower data to the 10 strain points, and likewise to the next ten when the anemometer refreshes its values.
    Thanks for any input!
    Andrew

    Check out the Queue multi-plexer vi from the examples.  C:\Program Files\National Instruments\LabVIEW 2009\examples\general\queue.llb\Queue Multiplexer.vi
    If each data acquisition loop enqueues data to one file writing loop the data is writen in order.  Queues are really a good way to multiplex data sources 
    Message Edited by Jeff Bohrer on 01-29-2010 09:44 AM
    Jeff

Maybe you are looking for

  • Oracle OUTER JOIN on more than one table

    Hi! Friends, please help with this urgent problem: How can an outer join be written on more than one table? An SQL Server query: SELECT * from a INNER JOIN b on a.id = b.id LEFT OUTER JOIN c ON c.id = a.id AND c.id = b.id works fine with SQL SERVER B

  • Internet Explorer 9 stops working

    I have Acrobat X installed. I have Internet Explorer 9 installed. When I open a PDF from the internet and it opens in the same tab, then I get a message that Internet Explorer has stopped working when I exit the PDF or close the browserr. This is uni

  • Problem with digital signature of documents

    I have a requirement to upload documents and his respected fingerprint signed (SHA1WithRSA). To achive this I am using the functions modules: SSF_KRN_DIGEST SSF_KRN_SIGN_BY_AS but I can´t make it work. I also ask for the .pem file used to generate th

  • Converting  an update statement to modify statement in BADI

    Hai I want to convert an update statement to  nodify statement . Can we define the internal table in BADI. Give me the code

  • How to open Acrobat Link in a New Window?

    I have a link on a PDF that I would like to open in a different window.  I would hope this is possible? Thank You.