PCM Player for Magnetone

Files at this revision

API Documentation at this revision

Comitter:
doctorura
Date:
Sat Nov 16 05:27:07 2013 +0000
Parent:
8:34dc92a836a3
Commit message:
playback speed bugfix

Changed in this revision

MagneWave.cpp Show annotated file Show diff for this revision Revisions of this file
MagneWave.h Show annotated file Show diff for this revision Revisions of this file
--- a/MagneWave.cpp	Sat Nov 09 13:39:43 2013 +0000
+++ b/MagneWave.cpp	Sat Nov 16 05:27:07 2013 +0000
@@ -1,9 +1,7 @@
 #include "MagneWave.h"
 
-
 #define DATA_OFFSET 44
 #define DAC16_CENTER  32768
-#define NEW_CODE
 
 MagneWave::MagneWave( SoftMCP4922 *dac )
 {
@@ -21,48 +19,30 @@
 
 void MagneWave::play( FILE *wavefile )
 {
-    printf("seek\n");
     // jump to wave data
     fseek( wavefile, DATA_OFFSET, SEEK_SET );
     
-    printf("1\n");
     m_dacOn = true;
-    printf("2\n");
     m_fileEnd = false;
     
-    printf("loop\n");
     while( m_dacOn ){
-        if( m_rptr != ( m_wptr + 1 ) & 0x7f ){
-#ifdef NEW_CODE
-            int tmpL = 0;
-            int tmpH = 0;
-            long dacVal16 = 0;
-            tmpL = fgetc( wavefile );
-            if( tmpL == EOF ){
-                printf("eofL\n.");
+        if( m_rptr != ( ( m_wptr + 1 ) & 0x7f ) ){
+
+            short dacVal16 = 0;
+            unsigned char tmp[2];
+
+            int ret = fread( tmp, 1, 2, wavefile);
+            if( ret < 2 ){
+                printf("eof\n.");
                 m_fileEnd = true;
                 break;
             }
-            tmpH = fgetc( wavefile );
-            if( tmpH == EOF ){
-                printf("eofH\n.");
-                m_fileEnd = true;
-                break;
-            }
-            dacVal16 = tmpL;
-            dacVal16 |= ( tmpH << 8 );
+            dacVal16 = tmp[0];
+            dacVal16 |= ( tmp[1] << 8 );
             dacVal16 += DAC16_CENTER;
+            
             m_fifo[m_wptr]= ( unsigned short )dacVal16;
-#else
-            size_t readSize = fread( (char *)m_fifo[m_wptr], 2, 1, wavefile); 
-            if( readSize < 1 ){
-                m_fileEnd = true;
-                break;
-            }
-#endif
             m_wptr = ( m_wptr + 1 ) & 0x7f;
-        }else{
-            printf("full\n");
         }
     }
     printf("off\n");
@@ -72,16 +52,7 @@
 {
     if ( m_dacOn ) {
         if( m_rptr != m_wptr ){
-#ifdef NEW_CODE
             m_wave_DAC->write_u16( m_fifo[ m_rptr ] );
-#else
-            unsigned short tmpL = ( m_fifo[ m_rptr ] >> 8) & 0x00ff;
-            unsigned short tmpH = ( m_fifo[ m_rptr ] << 8) & 0xff00;
-            short dacVal16 = tmpH | tmpL;
-            
-            dacVal16 += DAC16_CENTER;
-            m_wave_DAC->write_u16( dacVal16 );
-#endif
             m_rptr = ( m_rptr + 1 ) & 0x7f;
         }else{
             //printf("nohit r=%d,w=%d\n", m_rptr, m_wptr);
--- a/MagneWave.h	Sat Nov 09 13:39:43 2013 +0000
+++ b/MagneWave.h	Sat Nov 16 05:27:07 2013 +0000
@@ -28,7 +28,7 @@
     //FILE *m_wavefile;
     Ticker tick;
     unsigned short m_fifo[128];
-    short m_wptr;
+    volatile short m_wptr;
     volatile short m_rptr;
     bool m_dacOn;
     bool m_fileEnd;