Changeset 37ca4e8 in orbit for iOS


Ignore:
Timestamp:
10/22/13 09:02:23 (6 years ago)
Author:
Steve Castellotti <sc@…>
Branches:
master, Servo
Children:
9c3d59b
Parents:
ac05196
Message:
  • Audio Signal Generation completed by Hao Zhang
Location:
iOS/Orbit
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • iOS/Orbit/Orbit/AudioGenerator.m

    rc9b9edd r37ca4e8  
    1111 
    1212 
    13 #define SAMPLE_RATE_F 44100.f 
     13#define SAMPLE_RATE_F 48000.f 
    1414#define SIGNAL_WAVE_FREQUENCY 100.f 
    1515 
     
    1818 * Half periods in the audio code, in seconds. 
    1919 */ 
    20 #define longHIGH 0.000829649 
    21 #define longLOW 0.000797027 
    22 #define shortHIGH 0.000412649 
    23 #define shortLOW 0.000378351 
    24  
    25 #define IDLE_TIME_MS 20 
     20 
     21 
     22 
     23//#define longHIGH 0.000829649 
     24//#define longLOW 0.000797027 
     25//#define shortHIGH 0.000412649 
     26//#define shortLOW 0.000378351 
     27 
     28#define longHIGH 0.00089583333 
     29#define longLOW 0.00070833333 
     30#define shortHIGH 0.00045833333 
     31#define shortLOW 0.0003125 
     32 
     33#define USEFUL_BIT_SIZE 29 
     34 
     35#define IDLE_TIME_MS 84 
    2636 
    2737 
    2838volatile BOOL g_refreshCtrCode = NO; 
    2939 
     40//22 = 0.00045833333 
     41//15 = 0.0003125 
     42// 
     43//43 = 0.00089583333 
     44//34 = 0.00070833333 
     45// 
     46//14 = 0.00029166667 
     47//131 = 0.0027291667 
     48//16 = 0.00033333333 
     49//12 = 0.00025 
     50//3 = 0.0000625 
     51//18 = 0.000375 
     52//3998 = 0.083291667 
     53//4049 = 0.084354167 
     54 
     55#define INIT_CODE_DATA_SIZE 202 
     56 
     57 
     58double     g_initCodeTime[INIT_CODE_DATA_SIZE] = { 
     59     
     60    0.00089583333, 0.0003125, 
     61    0.00089583333, 0.0003125, 
     62    0.00089583333, 0.00070833333, 
     63    0.00045833333, 0.0003125, 
     64    0.00089583333, 0.00070833333, 
     65    0.00089583333, 0.00070833333, 
     66    0.00045833333, 0.0003125, 
     67    0.00089583333, 0.00070833333, 
     68    0.00089583333, 0.00070833333, 
     69    0.00089583333, 0.00070833333, 
     70    0.00045833333, 0.0003125, 
     71    0.00089583333, 0.00070833333, 
     72    0.00045833333, 0.0003125, 
     73    0.00045833333, 0.0003125, 
     74    0.00089583333, 0.00070833333, 
     75    0.00089583333, 0.00070833333, 
     76    0.00045833333, 0.0003125, 
     77    0.00045833333, 0.0003125, 
     78    0.00089583333, 0.00070833333, 
     79    0.00045833333, 0.0003125, 
     80    0.00045833333, 0.0003125, 
     81    0.00089583333, 0.00070833333, 
     82    0.00089583333, 0.00070833333, 
     83    0.00089583333, 0.00070833333, 
     84    0.00089583333, 0.00070833333, 
     85    0.00089583333, 0.00070833333, 
     86    0.00045833333, 0.0003125, 
     87    0.00089583333, 0.00070833333, 
     88    0.00089583333, 0.00070833333, 
     89    0.00045833333, 0.0003125, 
     90    0.00089583333, 0.00070833333, 
     91     
     92    0.083291667, 
     93     
     94    0.00089583333, 0.0003125, 
     95    0.00089583333, 0.0003125, 
     96    0.00089583333, 0.00070833333, 
     97    0.00045833333, 0.0003125, 
     98    0.00089583333, 0.00070833333, 
     99    0.00089583333, 0.00070833333, 
     100    0.00045833333, 0.0003125, 
     101    0.00089583333, 0.00070833333, 
     102    0.00089583333, 0.00070833333, 
     103    0.00089583333, 0.00070833333, 
     104    0.00045833333, 0.0003125, 
     105    0.00089583333, 0.00070833333, 
     106    0.00045833333, 0.0003125, 
     107    0.00045833333, 0.0003125, 
     108    0.00089583333, 0.00070833333, 
     109    0.00089583333, 0.00070833333, 
     110    0.00045833333, 0.0003125, 
     111    0.00045833333, 0.0003125, 
     112    0.00089583333, 0.00070833333, 
     113    0.00045833333, 0.0003125, 
     114    0.00045833333, 0.0003125, 
     115    0.00089583333, 0.00070833333, 
     116    0.00089583333, 0.00070833333, 
     117    0.00089583333, 0.00070833333, 
     118    0.00089583333, 0.00070833333, 
     119    0.00089583333, 0.00070833333, 
     120    0.00045833333, 0.0003125, 
     121    0.00089583333, 0.00070833333, 
     122    0.00089583333, 0.00070833333, 
     123    0.00045833333, 0.0003125, 
     124    0.00089583333, 0.00070833333, 
     125     
     126    0.083291667, 
     127     
     128    0.00029166667, 0.0027291667, 
     129    0.00029166667, 0.0027291667, 
     130    0.00029166667, 0.00033333333, 
     131    0.00025, 0.0000625, 
     132    0.00025, 0.0000625, 
     133    0.00025, 0.0000625, 
     134    0.00025, 0.0000625, 
     135    0.00025, 0.0000625, 
     136    0.00025, 0.0000625, 
     137     
     138    0.084354167, 
     139     
     140    0.00029166667, 0.0027291667, 
     141    0.00029166667, 0.0027291667, 
     142    0.00029166667, 0.00033333333, 
     143    0.00025, 0.0000625, 
     144    0.00025, 0.0000625, 
     145    0.00025, 0.0000625, 
     146    0.00025, 0.0000625, 
     147    0.00025, 0.0000625, 
     148    0.00025, 0.0000625, 
     149     
     150    0.084354167, 
     151     
     152    0.00029166667, 0.0027291667, 
     153    0.00029166667, 0.0027291667, 
     154    0.00025, 0.000375, 
     155    0.00025, 0.000375, 
     156    0.00025, 0.0000625, 
     157    0.00025, 0.0000625, 
     158    0.00025, 0.0000625, 
     159    0.00025, 0.0000625, 
     160    0.00025, 0.0000625, 
     161     
     162    0.084354167, 
     163     
     164    0.00029166667, 0.0027291667, 
     165    0.00029166667, 0.0027291667, 
     166    0.00025, 0.000375, 
     167    0.00025, 0.000375, 
     168    0.00025, 0.0000625, 
     169    0.00025, 0.0000625, 
     170    0.00025, 0.0000625, 
     171    0.00025, 0.0000625, 
     172    0.00025, 0.0000625, 
     173     
     174    0.084354167 
     175     
     176}; 
     177 
     178 
     179BOOL     g_initCodeUD[INIT_CODE_DATA_SIZE] = { 
     180     
     181    YES, NO, 
     182    YES, NO, 
     183    YES, NO, 
     184    YES, NO, 
     185    YES, NO, 
     186    YES, NO, 
     187    YES, NO, 
     188    YES, NO, 
     189    YES, NO, 
     190    YES, NO, 
     191    YES, NO, 
     192    YES, NO, 
     193    YES, NO, 
     194    YES, NO, 
     195    YES, NO, 
     196    YES, NO, 
     197    YES, NO, 
     198    YES, NO, 
     199    YES, NO, 
     200    YES, NO, 
     201    YES, NO, 
     202    YES, NO, 
     203    YES, NO, 
     204    YES, NO, 
     205    YES, NO, 
     206    YES, NO, 
     207    YES, NO, 
     208    YES, NO, 
     209    YES, NO, 
     210    YES, NO, 
     211    YES, NO, 
     212     
     213    NO, 
     214     
     215    YES, NO, 
     216    YES, NO, 
     217    YES, NO, 
     218    YES, NO, 
     219    YES, NO, 
     220    YES, NO, 
     221    YES, NO, 
     222    YES, NO, 
     223    YES, NO, 
     224    YES, NO, 
     225    YES, NO, 
     226    YES, NO, 
     227    YES, NO, 
     228    YES, NO, 
     229    YES, NO, 
     230    YES, NO, 
     231    YES, NO, 
     232    YES, NO, 
     233    YES, NO, 
     234    YES, NO, 
     235    YES, NO, 
     236    YES, NO, 
     237    YES, NO, 
     238    YES, NO, 
     239    YES, NO, 
     240    YES, NO, 
     241    YES, NO, 
     242    YES, NO, 
     243    YES, NO, 
     244    YES, NO, 
     245    YES, NO, 
     246     
     247    NO, 
     248     
     249    YES, NO, 
     250    YES, NO, 
     251    YES, NO, 
     252    YES, NO, 
     253    YES, NO, 
     254    YES, NO, 
     255    YES, NO, 
     256    YES, NO, 
     257    YES, NO, 
     258     
     259    NO, 
     260     
     261    YES, NO, 
     262    YES, NO, 
     263    YES, NO, 
     264    YES, NO, 
     265    YES, NO, 
     266    YES, NO, 
     267    YES, NO, 
     268    YES, NO, 
     269    YES, NO, 
     270     
     271    NO, 
     272     
     273    YES, NO, 
     274    YES, NO, 
     275    YES, NO, 
     276    YES, NO, 
     277    YES, NO, 
     278    YES, NO, 
     279    YES, NO, 
     280    YES, NO, 
     281    YES, NO, 
     282     
     283    NO, 
     284     
     285    YES, NO, 
     286    YES, NO, 
     287    YES, NO, 
     288    YES, NO, 
     289    YES, NO, 
     290    YES, NO, 
     291    YES, NO, 
     292    YES, NO, 
     293    YES, NO, 
     294     
     295    NO, 
     296     
     297}; 
     298 
    30299 
    31300@interface AudioGenerator() 
    32301{ 
     302     
     303    int         m_initCodeLen[INIT_CODE_DATA_SIZE]; 
    33304     
    34305    AudioUnit   m_audioUnit; 
     
    52323    int         idleWaveLen; 
    53324    int         idleWaveReadIdx; 
     325     
     326     
     327     
     328    BOOL        sendInitWave; 
     329     
     330    int         initWaveSendLenIdx; 
     331    int         initWaveSendLenIdxLenMax; 
     332    int         initWaveSendLenIdxLenCur; 
     333     
     334    Float32     initWaveCurAngle; 
    54335} 
    55336 
     
    108389    if (m_audioUnit == nil) { 
    109390        [self prepareAudioUnit]; 
     391         
     392        sendInitWave = YES; 
     393        initWaveSendLenIdx = 0; 
     394        initWaveSendLenIdxLenMax = m_initCodeLen[0]; 
     395        initWaveSendLenIdxLenCur = 0; 
     396        initWaveCurAngle = 0.f; 
    110397    } 
    111398     
     
    265552        } 
    266553         
    267         if (ctrWaveReadIdx <= ctrWaveDataLen && idleWaveReadIdx == 0) { 
    268             *buffer++ = ctrWave[ctrWaveReadIdx++]; 
    269         } 
    270         else if (ctrWaveReadIdx > ctrWaveDataLen && idleWaveReadIdx <= idleWaveLen) 
    271         { 
    272             *buffer++ = 0.0f; 
    273             idleWaveReadIdx++; 
    274         } 
    275         else if (ctrWaveReadIdx > ctrWaveDataLen && idleWaveReadIdx > idleWaveLen) 
    276         { 
    277             ctrWaveReadIdx = 0; 
    278             idleWaveReadIdx = 0; 
    279             *buffer++ = ctrWave[ctrWaveReadIdx++]; 
    280         } 
     554        if (sendInitWave) { 
     555             
     556            double increment = M_PI/(g_initCodeTime[initWaveSendLenIdx] * SAMPLE_RATE_F); 
     557             
     558            if (g_initCodeUD[initWaveSendLenIdx]) { 
     559                *buffer++ = sinf(initWaveCurAngle); 
     560                initWaveCurAngle += increment; 
     561            } 
     562            else { 
     563                *buffer++ = 0.0f; 
     564            } 
     565             
     566            initWaveSendLenIdxLenCur++; 
     567             
     568            if (initWaveSendLenIdxLenCur >= initWaveSendLenIdxLenMax) { 
     569                initWaveSendLenIdx++; 
     570                 
     571                if (initWaveSendLenIdx >= INIT_CODE_DATA_SIZE) { 
     572                    sendInitWave = NO; 
     573                    continue; 
     574                } 
     575                else { 
     576                    initWaveSendLenIdxLenMax = m_initCodeLen[initWaveSendLenIdx]; 
     577                    initWaveSendLenIdxLenCur = 0; 
     578                    initWaveCurAngle = 0.f; 
     579                } 
     580                 
     581                 
     582            } 
     583             
     584             
     585        } 
     586        else { 
     587            if (ctrWaveReadIdx < ctrWaveDataLen && idleWaveReadIdx == 0) { 
     588                *buffer++ = ctrWave[ctrWaveReadIdx++]; 
     589            } 
     590            else if (ctrWaveReadIdx >= ctrWaveDataLen && idleWaveReadIdx < idleWaveLen) 
     591            { 
     592                *buffer++ = 0.0f; 
     593                idleWaveReadIdx++; 
     594            } 
     595            else if (ctrWaveReadIdx >= ctrWaveDataLen && idleWaveReadIdx >= idleWaveLen) 
     596            { 
     597                ctrWaveReadIdx = 0; 
     598                idleWaveReadIdx = 0; 
     599                *buffer++ = ctrWave[ctrWaveReadIdx++]; 
     600            } 
     601        } 
     602         
    281603         
    282604    } 
     
    326648    [self generateWaveBit]; 
    327649     
     650     
     651    [self initCodeWaveLen]; 
     652     
    328653    [self generateCtrWaveHead]; 
    329654    [self generateWaveBit_01]; 
     
    332657} 
    333658 
     659- (void)initCodeWaveLen 
     660{ 
     661    //int initCodeDataLen = sizeof(g_initCodeTime) / sizeof(double); 
     662     
     663    for (int i=0; i < INIT_CODE_DATA_SIZE; ++i) { 
     664        m_initCodeLen[i] = [self arraySizeWithHalfPeriod:g_initCodeTime[i]]; 
     665    } 
     666     
     667    initWaveSendLenIdx = 0; 
     668    initWaveSendLenIdxLenMax = m_initCodeLen[0]; 
     669    initWaveSendLenIdxLenCur = 0; 
     670    initWaveCurAngle = 0.f; 
     671} 
     672 
    334673- (void)setupCtrWave 
    335674{ 
    336675    ctrWaveMaxLen = ctrWaveHeadLen + 
    337                 27 * (waveBit_01_len[0] > waveBit_01_len[1] ? waveBit_01_len[0] : waveBit_01_len[1]) + 
     676                USEFUL_BIT_SIZE * (waveBit_01_len[0] > waveBit_01_len[1] ? waveBit_01_len[0] : waveBit_01_len[1]) + 
    338677                longHighLength; 
    339678     
     
    348687} 
    349688 
     689 
     690 
    350691- (void)generateCtrWaveHead 
    351692{ 
    352     int ctr_longH_len = [self arraySizeWithHalfPeriod:longHIGH - sampleTime * 2]; 
    353     int ctr_shortL_len = [self arraySizeWithHalfPeriod:shortLOW + sampleTime * 2]; 
    354      
    355     ctrWaveHeadLen = longLowLength + 2 * ctr_longH_len + 2 * ctr_shortL_len; 
     693    int ctr_longH_len = [self arraySizeWithHalfPeriod:longHIGH]; 
     694    int ctr_shortL_len = [self arraySizeWithHalfPeriod:shortLOW]; 
     695     
     696    ctrWaveHeadLen = 2 * ctr_longH_len + 2 * ctr_shortL_len; 
    356697    ctrWaveHead = malloc(sizeof(Float32) * ctrWaveHeadLen); 
    357698     
    358699    int idx = 0; 
    359      
    360     for (int i=0; i < longLowLength; ++i) { 
    361         ctrWaveHead[idx++] = waveLongLow[i]; 
    362     } 
    363700     
    364701    double increment = M_PI/((longHIGH - sampleTime * 2) * SAMPLE_RATE_F); 
     
    449786    code += ((channel >> 1) & 1) << 19; 
    450787    code += (channel & 1) << 11; 
    451     return code + [self codeChecksum:code]; 
     788    code += [self codeChecksum:code]; 
     789     
     790    return (code << 1) + 1; 
    452791} 
    453792 
     
    456795    int ctr_code = [self generateCode]; 
    457796     
    458     //ctr_code = 0; 
     797    //1110110111010011001001111101101 
     798     
     799    //ctr_code = 0B00010110111010011001001111101101; 
     800    //ctr_code = 0x0000FFFF; 
    459801     
    460802    [self codeToWave:ctr_code]; 
     
    470812    Float32 *pos = ctrWave + ctrWaveHeadLen; 
    471813     
    472     for (int i=27; i >= 0 ; --i) { 
     814    for (int i=USEFUL_BIT_SIZE-1; i >= 0 ; --i) { 
    473815        int bit = (code >> i) & 1; 
    474816        memcpy(pos, waveBit_01[bit], sizeof(Float32) * waveBit_01_len[bit]); 
  • iOS/Orbit/Orbit/SignalConverter.m

    rc9b9edd r37ca4e8  
    284284    pitch = p; 
    285285     
    286     [audioPlayer playWithThrottle:throttle yaw:yaw pitch:pitch]; 
     286    if (testing) { 
     287        [audioPlayer playWithThrottle:throttle yaw:yaw pitch:pitch]; 
     288    } 
     289     
    287290} 
    288291 
  • iOS/Orbit/Orbit/controllers/AdvancedViewController.m

    r505e3d5 r37ca4e8  
    2727    signalConverter = appDelegate.signalConverter; 
    2828    
    29    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Help Wanted" message:@"Please join our Open Source development community to help us port this feature! See link to Forums under Support tab" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
    30    [alert show]; 
     29//   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Help Wanted" message:@"Please join our Open Source development community to help us port this feature! See link to Forums under Support tab" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
     30//   [alert show]; 
    3131} 
    3232 
  • iOS/Orbit/Orbit/en.lproj/MainStoryboard.storyboard

    rac05196 r37ca4e8  
    11<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
    2 <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4510" systemVersion="12E55" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="T1J-Fd-fkz"> 
     2<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4510" systemVersion="12F45" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="T1J-Fd-fkz"> 
    33    <dependencies> 
    4         <deployment defaultVersion="1552" identifier="iOS"/> 
     4        <deployment defaultVersion="1280" identifier="iOS"/> 
    55        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3742"/> 
    66    </dependencies> 
     
    103103                            </view> 
    104104                            <view contentMode="scaleToFill" id="EIx-J4-YAd" userLabel="Pitch Box"> 
    105                                 <rect key="frame" x="6" y="345" width="309" height="90"/> 
     105                                <rect key="frame" x="6" y="289" width="309" height="90"/> 
    106106                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/> 
    107107                                <subviews> 
     
    143143                            </view> 
    144144                            <view contentMode="scaleToFill" id="5aV-7g-jF0" userLabel="Yaw Box"> 
    145                                 <rect key="frame" x="6" y="213" width="309" height="86"/> 
     145                                <rect key="frame" x="6" y="189" width="309" height="86"/> 
    146146                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/> 
    147147                                <subviews> 
     
    154154                                    </label> 
    155155                                    <slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" id="8k8-7Y-hWH" userLabel="Yaw"> 
    156                                         <rect key="frame" x="4" y="26" width="254" height="29"/> 
     156                                        <rect key="frame" x="4" y="25" width="254" height="29"/> 
    157157                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/> 
    158158                                        <connections> 
     
    360360                            </view> 
    361361                            <view contentMode="scaleToFill" id="lfi-AW-BAx"> 
    362                                 <rect key="frame" x="7" y="314" width="308" height="160"/> 
     362                                <rect key="frame" x="7" y="312" width="308" height="117"/> 
    363363                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/> 
    364364                                <subviews> 
Note: See TracChangeset for help on using the changeset viewer.