forked from earlephilhower/ESP8266Audio
    
        
        - 
                Notifications
    
You must be signed in to change notification settings  - Fork 0
 
OPUS #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
          
     Open
      
      
            SciLor
  wants to merge
  203
  commits into
  toniebox-reverse-engineering:master
  
    
      
        
          
  
    
      Choose a base branch
      
     
    
      
        
      
      
        
          
          
        
        
          
            
              
              
              
  
           
        
        
          
            
              
              
           
        
       
     
  
        
          
            
          
            
          
        
       
    
      
from
earlephilhower:master
  
      
      
   
  
    
  
  
  
 
  
      
    base: master
Could not load branches
            
              
  
    Branch not found: {{ refName }}
  
            
                
      Loading
              
            Could not load tags
            
            
              Nothing to show
            
              
  
            
                
      Loading
              
            Are you sure you want to change the base?
            Some commits from the old base branch may be removed from the timeline,
            and old review comments may become outdated.
          
          
                
     Open
            
            OPUS #2
                    SciLor
  wants to merge
  203
  commits into
  toniebox-reverse-engineering:master
from
earlephilhower:master
  
      
      
   
              
            Conversation
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
    ESP32 doesn't have the redirect following capability, don't try and turn it on.
Valgrind detects an error in TSF.h, not yet fixed. This could be causing issues on the ESP32.
Valgrind identified cases where the chunk read position came out to be -1, which was causing a read of memory before the actual cache buffers. This could result in add'l noise on playback.
Re-enable ESP32 builds in CI Fix examples which do not compile on ESP32
Thanks to Marc Madaule for the patch adding FatFS for the ESP32 as a file source.
Velocity in the MIDI format goes from 1...127, so scale the volume of the note generator by /128 instead of /256. Increases volume of all notes by 2x linearly (3dB). Found by Marc Madaule
Patch 21c07c0bcd702e7adf3db349ac926914b98d17ce was applied to the TSF's original code, but not to the fixed-point generator used by the ESP8266. Apply it to the FP unit as well. Spotted by Marc Madaule
Add ported versions of the Opus codec, OpusFile parser, and OGG demuxer from Xiph.org. Only works on the ESP32 due to memory limitations (of opusfile, strangely enough, and not because of opus compression). Adds a basic example and a host test. Fixes #278
As noted by Marc Madaule (thanks!), the mono AAC decode was not functioning properly. Adjust the output stuff loop to fix.
Bugfixes to AAC and Opus codec addition
* test/run on host to null device * compilation fix
* separate malloc structures * add desync() for user when randomly seeking in the input file fix corner cases leading to exceptions when seeking * additional test when trying to crash-shake everything with a rotary encoder seeking into the currently played file * use private instead of static * remove temporary debug code
PlatformIO requires these dependencies to be explicitly mentioned. Please check the version numbers of the libraries specified are correct. However, v1.0 for each allows for successful builds. Thanks!
When reusing the AudioGeneratorMP3 object to play multiple files with errors, the error count was never reset. Also, if 3 errors are encountered, it would stop running but never clean up the buffers.
Code courtesy of Martin Laclaustra. Uses the ULP coprocessor on the ESP32 to send samples to the onboard DACs, freeing the I2S port for other uses. Connect left output to pin 25, right to pin 26.
Fixes #399 rtc_clk_cal can return 0 while calibration is underway. If that happens busy-wait until it returns a valid period.
* Fix ULP on ESP32 CONFIG_IDF_TARGET_ESP32 is not yet defined before #include "AudioOutputULP.h" * AudioOutputULP: Fix DAC2 stereo in case of DAC1+DAC2 * ULP - no ESP32S2 / S3 On ESP32S2 it compiles, but no audio is coming out On ESP32S3 DAC is not supported * Astyle --------- Co-authored-by: Earle F. Philhower, III <earlephilhower@yahoo.com>
Move to Opus 1.5.1 Remove OpusFile and OGG libraries because we parse the OGG file in the object directly with way less memory and overhead. Update example for LittleFS and RP2040 Fixes #372
Only the WAV and FLAC generators can generate 8-bit values, so it is more efficient and sane to just have those generators upscale to 16-bit signed (if necessary) in generation and simplify all the other Generators and Outputs.
Move to the new I2S driver for the ESP chips, since the next revisioncl of the IDF will remove them completely. Make the I2S constructors saner and add consistent SetPinout() and SetBuffers calls to allow configuration. Remove need for separate UseMCLK or SwapClocks calls, we can figure that out from the pins selected. Fixes #758
Borrowed from BackgroundAudio PDM implementation https://github.com/earlephilhower/BackgroundAudio Requires an ESP32 model with PDM support.
Espressif changes the contents of the PDM struct depending on the chip model. Use a hopefully valid `#define` to avoid setting a member that's not there in some cases. Fixes #785
Help with testing optimization by minimizing non-decode CPU usage
* Pull untouched upstream TinySoundFont Start from the upstream TinySoundFont by @schellingb at https://github.com/schellingb/TinySoundFont and rearchitect the MIDI processing. * Convert to PROGMEM-based SoundFont structures. This makes it much faster to access the SoundFont and also removes all the static RAM usage. The samples, the regions, the instruments are all now in ROM. Only the dynamic voices and related info takes up RAM. No caching. * (Re)convert to fixed point math. TSF upstream is built for systems with real floating point units (and produces great sound with it!), but processors like the Pico, ESP8266, and several models of ESP32 don't have one so emulate FP in *extremely* slow SW. Use fixed point (integer) representations for the inner loop and wherever possible to avoid `float` math. For processors like the Pico 2 or original ESP32 with hardware FPUs this still increases performance since integer is still much faster. * Redo the example and add default SF2s Rewrite the MIDI examples to use PROGMEM for both SF2 and MID file. It simplifies life for the casual user and me. * Breaking change The MIDI object now has a `midi::SetSoundFont(tsf *)` instead of a `midi::SetSoundfont(AudioFileSource *)`. It no longer supports reading SF2 from LittleFS or SD.
By rendering into a 32b int we don't have to saturate check in the inner loop of the voice render, which is called multiple times per actual output block. That check is very expensive. In tsf_render_short make the input `short *buffer` have 2x the space as normal to allow the full 32b quantity for each sample to accumulate. After all voices have been rendered, then resample with saturation into int16_t values. About 24% faster on the Pico while still saturating properly.
262145d    to
    41b96ef      
    Compare
  
    Use a numeric approximation to make powf much faster. Loss of accuracy isn't an issue in an audio output device.
The I2S write was always blocking meaning only a single loop call might have ended up playing the entire audio output. Replace the timeout of `10` with `0`.
Added section on ESP32 and Platform.IO integration issues and solutions.
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment
  
      
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
No description provided.