Changeset a2d894c in orbit


Ignore:
Timestamp:
11/29/12 15:30:03 (7 years ago)
Author:
AzureViolin <zhanghaotz@…>
Branches:
master, RawEEG, Raw_EEG_Plot, Servo, Tab_Interface, pyramid
Children:
9b39e33
Parents:
f22b7ab (diff), 2fc778c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of ssh://puzzlebox.info/repo/orbit

Files:
4 added
3 edited

Legend:

Unmodified
Added
Removed
  • android/src/info/puzzlebox/orbit/MainActivity.java

    r1a53973 r2fc778c  
    1010import com.neurosky.thinkgear.TGDevice; 
    1111 
     12import android.media.AudioFormat; 
     13import android.media.AudioManager; 
     14import android.media.AudioTrack; 
     15import android.media.SoundPool; 
     16import android.media.SoundPool.OnLoadCompleteListener; 
    1217import android.os.Bundle; 
    1318import android.os.Handler; 
     
    2227import android.graphics.drawable.shapes.RoundRectShape; 
    2328import android.hardware.usb.UsbManager; 
     29import android.util.Log; 
    2430import android.view.Gravity; 
    2531//import android.view.Menu; 
     
    9197        //private static final String MAC_ADDRESS = "00:16:53:09:0B:B9"; 
    9298 
     99         
     100         
     101//      2012.11.28-orbit-hdmi-android-manual_from_untitled08.wav 
     102        private SoundPool soundPool; 
     103        private int soundID; 
     104        boolean loaded = false; 
     105         
     106        // Tone Generator 
     107        // http://stackoverflow.com/questions/2413426/playing-an-arbitrary-tone-with-android 
     108        private final int duration = 10; // seconds 
     109    private final int sampleRate = 8000; 
     110    private final int numSamples = duration * sampleRate; 
     111    private final double sample[] = new double[numSamples]; 
     112    private final double freqOfTone = 440; // hz 
     113     
     114    private final byte generatedSnd[] = new byte[2 * numSamples]; 
     115         
     116     
     117    void genTone(){ 
     118        // fill out the array 
     119        for (int i = 0; i < numSamples; ++i) { 
     120            sample[i] = Math.sin(2 * Math.PI * i / (sampleRate/freqOfTone)); 
     121        } 
     122 
     123        // convert to 16 bit pcm sound array 
     124        // assumes the sample buffer is normalized. 
     125        int idx = 0; 
     126        for (final double dVal : sample) { 
     127            // scale to maximum amplitude 
     128            final short val = (short) ((dVal * 32767)); 
     129            // in 16 bit wav PCM, first byte is the low order byte 
     130            generatedSnd[idx++] = (byte) (val & 0x00ff); 
     131            generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8); 
     132 
     133        } 
     134    } 
     135 
     136    void playSound(){ 
     137        @SuppressWarnings("deprecation") 
     138                final AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 
     139//                sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, 
     140              sampleRate, AudioFormat.CHANNEL_OUT_MONO, 
     141//              sampleRate, AudioFormat.CHANNEL_OUT_STEREO, 
     142//                sampleRate, AudioFormat.CHANNEL_OUT_FRONT_RIGHT, 
     143//                sampleRate, AudioFormat.CHANNEL_CONFIGURATION_STEREO, 
     144                AudioFormat.ENCODING_PCM_16BIT, generatedSnd.length, 
     145                AudioTrack.MODE_STATIC); 
     146        audioTrack.write(generatedSnd, 0, generatedSnd.length); 
     147        audioTrack.play(); 
     148    } 
     149         
     150         
    93151        /** 
    94152         * The device currently in use, or {@code null}. 
     
    207265                serial = new SerialDevice(); 
    208266                serial.setSerialDevice(mSerialDevice); 
     267                 
     268                 
     269                genTone(); 
     270                //playSound(); 
     271                 
     272                 
     273                // Set the hardware buttons to control the music 
     274            this.setVolumeControlStream(AudioManager.STREAM_MUSIC); 
     275            // Load the sound 
     276            soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); 
     277            soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { 
     278//            @Override 
     279              public void onLoadComplete(SoundPool soundPool, int sampleId, 
     280                  int status) { 
     281                loaded = true; 
     282              } 
     283            }); 
     284            soundID = soundPool.load(this, R.raw.htc_one_x, 1); 
    209285 
    210286 
     
    520596 
    521597        public void demoMode(View view) { 
    522  
    523                 String command = "neutral"; 
    524                  
    525                 appendTextAndScroll("Command for serial device: " + command + "\n"); 
    526                 serial.setCommand(command); 
    527  
    528                 try { 
    529                         Thread.sleep(5000); 
    530                 } catch (InterruptedException e) { 
    531                         // TODO Auto-generated catch block 
    532                         e.printStackTrace(); 
    533                 } 
    534  
    535 //              command = "hover"; 
    536                 command = "idle"; 
    537                 appendTextAndScroll("Command for serial device: " + command + "\n"); 
    538                 serial.setCommand(command); 
    539  
    540                 try { 
    541                         Thread.sleep(2500); 
    542                 } catch (InterruptedException e) { 
    543                         // TODO Auto-generated catch block 
    544                         e.printStackTrace(); 
    545                 }                
    546  
    547  
    548                 command = "neutral"; 
    549                 appendTextAndScroll("Command for serial device: " + command + "\n"); 
    550                 serial.setCommand(command); 
     598                 
     599//              playSound(); 
     600                 
     601                 
     602                // Getting the user sound settings 
     603              AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); 
     604              float actualVolume = (float) audioManager 
     605                  .getStreamVolume(AudioManager.STREAM_MUSIC); 
     606              float maxVolume = (float) audioManager 
     607                  .getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
     608              float volume = actualVolume / maxVolume; 
     609              // Is the sound loaded already? 
     610              if (loaded) { 
     611                soundPool.play(soundID, volume, volume, 1, 0, 1f); 
     612                Log.e("Test", "Played sound"); 
     613              }          
     614                 
     615 
     616//              String command = "neutral"; 
     617//               
     618//              appendTextAndScroll("Command for serial device: " + command + "\n"); 
     619//              serial.setCommand(command); 
     620// 
     621//              try { 
     622//                      Thread.sleep(5000); 
     623//              } catch (InterruptedException e) { 
     624//                      // TODO Auto-generated catch block 
     625//                      e.printStackTrace(); 
     626//              } 
     627// 
     628////            command = "hover"; 
     629//              command = "idle"; 
     630//              appendTextAndScroll("Command for serial device: " + command + "\n"); 
     631//              serial.setCommand(command); 
     632// 
     633//              try { 
     634//                      Thread.sleep(2500); 
     635//              } catch (InterruptedException e) { 
     636//                      // TODO Auto-generated catch block 
     637//                      e.printStackTrace(); 
     638//              }                
     639// 
     640// 
     641//              command = "neutral"; 
     642//              appendTextAndScroll("Command for serial device: " + command + "\n"); 
     643//              serial.setCommand(command); 
    551644 
    552645 
  • octave/GenerateAudioCommand/flyOrbit.m

    ra0b523e rf22b7ab  
    33% code: array of 1s and 0s. 1 means bit "1", 0 means bit "0". 
    44% audioFileName: like 'audio.wav'. 
    5 % space: space between codes [samples] 
     5% space: space between codes [us] 
    66bps = 16;       % bits per sample 
    77%sps = 96000;     % sample rate [samples/s] 
     8 
     9space=floor(space*48000/1e6); 
     10 
    811if length(AndroidOriOS)==3 %iOS 
    912fullCodeWave=[flyCommand(code,space,'temp1.wav',sps,2,AndroidOriOS,flipOrNot);initCodeGen('temp2.wav');flyCommand(code,space,'temp3.wav',sps,repeatTime,AndroidOriOS,flipOrNot)]; 
    1013 
    1114elseif length(AndroidOriOS)==7 %Android 
    12 fullCodeWave=[flyCommand(code,space,'temp1,wav',sps,20,AndroidOriOS,flipOrNot);initCodeGenAndroid('temp2.wav');zeros(1,1);flyCommand(code,space,'temp3.wav',sps,repeatTime,AndroidOriOS,flipOrNot)]; 
     15 
     16        if AndroidOriOS=='Android' 
     17        fullCodeWave=[flyCommand(code,space,'temp1,wav',sps,4,AndroidOriOS,flipOrNot);initCodeGenAndroid('temp2.wav',sps);zeros(1,1);flyCommand(code,space,'temp3.wav',sps,repeatTime,AndroidOriOS,flipOrNot)]; 
     18        elseif AndroidOriOS=='Command' 
     19        fullCodeWave=[flyCommand(code,space,'temp3.wav',sps,repeatTime,AndroidOriOS,flipOrNot)]; 
     20        endif 
    1321 
    1422endif 
  • octave/GenerateAudioCommand/initCodeGenAndroid.m

    ra0b523e rf22b7ab  
    1 function initWave=initCodeGenAndroid(audioFileName);  
     1function initWave=initCodeGenAndroid(audioFileName,sps);  
    22 
    33% code: array of 1s and 0s. 1 means bit "1", 0 means bit "0". 
     
    55% Multiplyer: value around 1, to change "carrier" period. 
    66bps = 16;       % bits per sample 
    7 sps = 48000;     % sample rate [samples/s] 
    87 
    9 longHIGH=45+3; 
    10 longLOW=89+7; 
    11 mediumLOW=21+2; 
    12 shortHIGH=5; 
    13 shortLOW=8; 
    14 pause=480; 
    15 space=4049; 
     8_longHIGH=1000; %[us] 
     9_longLOW=2000;  
     10_mediumLOW=500; 
     11_shortHIGH=100; 
     12_shortLOW=180; 
     13_pause=10000; 
     14_space=84354; 
     15 
     16longHIGH=floor(_longHIGH*sps/1e6)-1; 
     17longLOW=floor(_longLOW*sps/1e6)+1; 
     18mediumLOW=floor(_mediumLOW*sps/1e6)-1; 
     19shortHIGH=floor(_shortHIGH*sps/1e6)+1; 
     20shortLOW=floor(_shortLOW*sps/1e6); 
     21pause=floor(_pause*sps/1e6); 
     22space=floor(_space*sps/1e6); 
    1623 
    1724initWave=[halfSineGenDirect('u',longHIGH,0,1,sps);zeros(longLOW,1);halfSineGenDirect('u',longHIGH,0,1,sps);zeros(longLOW,1);halfSineGenDirect('u',longHIGH,0,1,sps);halfSineGenDirect('d',mediumLOW,0,1,sps);halfSineGenDirect('u',shortHIGH,0,1,sps)]; 
Note: See TracChangeset for help on using the changeset viewer.