Changeset 5511

Show
Ignore:
Timestamp:
10/25/07 13:12:50 (6 years ago)
Author:
jgaeddert
Message:

packing samples properly in output realChar port so that C++ components can read them properly, sending COPY of metadata to output port so that packet_id is not changed before packet is sent, adding global audio variables, adding global method to create default meta data object

Location:
experimental/components/rc2007_gui
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • experimental/components/rc2007_gui/WorkModules.py

    r5508 r5511  
    3636import ossaudiodev 
    3737import struct   # for audio 
     38import copy 
    3839 
    3940import cvsd     # this is in my rc2007_gui package directory 
     
    6970    return math.sqrt(e/len(x)) 
    7071 
     72# global sound card variables 
     73audio_sampling_frequency = 16000 
     74audio_channels = 1 
     75audio_buffer_length = 1024 
     76 
     77def CreateMetadataObject(): 
     78    modulation_scheme = SI.ModulationScheme(SI.ModulationScheme.PSK, 2) 
     79 
     80    packet_id = 0 
     81    sampling_frequency = 0.0 
     82    carrier_frequency = 0.0 
     83    signal_bandwidth = 0.0 
     84    signal_strength = 0.0 
     85    eom = True 
     86    default_metadata = SI.MetaData(modulation_scheme, 
     87                                   packet_id, 
     88                                   sampling_frequency, 
     89                                   carrier_frequency, 
     90                                   signal_bandwidth, 
     91                                   signal_strength, 
     92                                   eom)  
     93    return default_metadata 
     94 
    7195 
    7296class txWorkClass: 
     
    80104     
    81105        # open the capture device and set properties 
    82         Fs = 16000   # sampling frequency 
    83         self.num_channels = 2 
     106        Fs = audio_sampling_frequency   # sampling frequency 
     107        self.num_channels = audio_channels 
    84108 
    85109        # open the playback device and set properties 
     
    90114 
    91115 
    92         self.buf_len = 512*2*self.num_channels 
     116        self.buf_len = audio_buffer_length 
    93117 
    94118        self.voice_data_queue = [] 
     
    97121        self.is_running = True  
    98122 
    99         modulation_scheme = SI.ModulationScheme(SI.ModulationScheme.PSK, 2) 
    100  
    101         packet_id = 0 
    102         sampling_frequency = 0.0 
    103         carrier_frequency = 0.0 
    104         signal_bandwidth = 0.0 
    105         signal_strength = 0.0 
    106         eom = True 
    107         self.default_metadata = SI.MetaData(modulation_scheme, 
    108                                             packet_id, 
    109                                             sampling_frequency, 
    110                                             carrier_frequency, 
    111                                             signal_bandwidth, 
    112                                             signal_strength, 
    113                                             eom)  
    114     
     123        # create meta data objects for audio and text 
     124        self.audio_metadata = CreateMetadataObject() 
     125        self.text_metadata = CreateMetadataObject() 
     126 
    115127        self.my_encoder = cvsd.encoder() 
    116128        self.my_decoder = cvsd.decoder() 
     
    150162    def SendTextData(self,text): 
    151163        # TODO: pack/depack 
    152         metadata = self.default_metadata 
    153164        # tmp: False for text 
    154165        # configure meta data here 
    155         metadata.eom = False 
    156         self.rc2007_gui_ref.to_radio_port_servant.send_data(text, metadata) 
     166        self.text_metadata.eom = False 
     167        self.text_metadata.packet_id += 1 
     168        #print "text " + str(self.text_metadata.packet_id) + "  " + text 
     169        self.rc2007_gui_ref.to_radio_port_servant.send_data( 
     170                text, 
     171                copy.copy(self.text_metadata)) 
    157172     
    158173    def Release(self): 
     
    161176         
    162177    def Process(self): 
    163         metadata = self.default_metadata 
    164178        while self.is_running: 
    165179            self.voice_data_signal.wait()  # wait for data to be aded to the  
     
    175189                    # encode audio data using CVSD codec 
    176190                    data_int = self.my_encoder.Encode(data) 
    177                     # convert integer data (0,1) to string 
     191                    # pack integers into string 
     192                    # NOTE: this does NOT mean that an integer zero is 
     193                    #   converted into an ASCII '0' character, but rather 
     194                    #   the '\x00' character 
    178195                    data = '' 
    179196                    for b in data_int: 
    180                         data += str(b) 
    181  
     197                        data += struct.pack('B', b); 
     198                    # tmp: true for voice 
     199                    # configure meta data here 
     200                    self.audio_metadata.eom = True 
     201                    self.audio_metadata.packet_id += 1 
     202 
     203                    #print ">"*4 + " audio enc " + str(self.audio_metadata.packet_id) + \ 
     204                    #      "  " + str(data_int[0:10]) 
    182205         
    183206                    if self.rc2007_gui_ref.to_radio_port_active: 
    184                         # tmp: true for voice 
    185                         # configure meta data here 
    186                         metadata.eom = True 
    187                         self.rc2007_gui_ref.to_radio_port_servant.send_data(data, metadata) 
     207                        #print "audio length: " + str(len(data)) 
     208                        self.rc2007_gui_ref.to_radio_port_servant.send_data( 
     209                                data, 
     210                                copy.copy(self.audio_metadata)) 
    188211 
    189212            self.voice_data_signal.clear()  # done reading the buffer 
     
    201224    
    202225        # new method:  
    203         self.num_channels = 2 
    204         Fs = 16000 
     226        self.num_channels = audio_channels 
     227        Fs = audio_sampling_frequency 
    205228        self.speaker_driver = ossaudiodev.open('w') 
    206229        self.speaker_driver.setfmt(ossaudiodev.AFMT_S16_LE) 
     
    319342                    data_int = [] 
    320343                    for c in data: 
    321                         data_int.append(int(c)) 
     344                        data_int.append( int(struct.unpack('B', c)[0]) ) 
     345                    #print "<"*4 + " audio dec " + str(metadata.packet_id) + \ 
     346                    #      "  " + str(data_int[0:10]) 
     347 
    322348                    self.CVSDDecode(data_int) 
    323349 
  • experimental/components/rc2007_gui/port_impl.py

    r5508 r5511  
    4343 
    4444    def pushPacketMetaData(self, data, metadata): 
     45        #print "rx packet " + str(metadata.packet_id) + \ 
     46        #      ", len = " + str(len(data)) + \ 
     47        #      "  voice? " + str(metadata.eom) 
    4548        self.parent.rx_work_mod.AddMetaData(data, metadata) 
    4649 
     
    101104                # send the data to all outPort connections  
    102105                for port in self.outPorts.values(): 
     106                    #print "tx packet " + str(metadata.packet_id) + \ 
     107                    #      ", len = " + str(len(data)) + \ 
     108                    #      "  voice? " + str(metadata.eom) 
    103109                    port.pushPacketMetaData(data, metadata) 
    104110