element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      • Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Raspberry Pi
  • Products
  • More
Raspberry Pi
Raspberry Pi Forum Using ALSA for Custom Real Time Audio Effects
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Raspberry Pi to participate - click to join for free!
Featured Articles
Announcing Pi
Technical Specifications
Raspberry Pi FAQs
Win a Pi
Raspberry Pi Wishlist
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Not Answered
  • Replies 20 replies
  • Subscribers 676 subscribers
  • Views 3990 views
  • Users 0 members are here
  • logic
  • raspberry
  • real-time
  • c
  • audio
  • alsa
  • pi
  • guitar
  • cirrus
  • card
  • signal-processing
Related

Using ALSA for Custom Real Time Audio Effects

Former Member
Former Member over 10 years ago

Hi,

 

I am working on a project where I use a Cirrus Logic Audio Card with a Raspberry Pi to implement a reverberation effect for a guitar. The idea is to use the line in port of the Cirrus card to capture the data one sample at a time, put that sample through some custom C code that I have already finished, and then put the new sample out through the line out port. I have been having a lot of difficulty figuring out how to capture one sample at a time in real time in a way that I can run my C code on it. After reading and asking many questions and discussions I believe it might be necessary to write some custom C code within the ALSA development library. However, I am not experienced at this type of development and was wondering if anyone could help me figure out how to integrate my C code with ALSA so that I can perform real time custom audio effects. (Or if there is a way to do it without ALSA, that is also fine).

 

Thanks for any help,

 

Ryan

  • Sign in to reply
  • Cancel
Parents
  • mconners
    0 mconners over 10 years ago

    I haven't played with the Cirrus Logic card on the Pi, but was curious, typically in *nix operating systems, everything to the os looks like a file. So the os doesn't make a distinction between a file on disk, whether it is a text file, binary file, or a device. The normal method in C would be to do an open() or fopen() on the device file, which in the case of audio might be /dev/snd/pcmC0D0c which would be a sound capture device, and use read() to read bytes. Have you tried this? Also, the device file I listed is what appears on my desktop, the actual devices on the Pi with the Cirrus Logic card may be named differently, but the general idea would be the same.

     

    Just trying to get a starting point to enable further discussion.

     

    Mike

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • mconners
    0 mconners over 10 years ago in reply to mconners

    as an example something like

     

    int main(){
         FILE *fd;
         int c;
         setupAudiocard(); // do init here, setup sample rate here
         fd = fopen("/dev/snd/pcmC0D0c", "r");
         if(fd == NULL)
              printf("Error couldn't open file"); //error message
        
        while ((c = fgetc(fd)) != EOF)
         audioProcessingFunction(c); // your processing function that does reverb and outputs
    }

     

     

    This is just a general idea, I haven't tried compiling this image

     

    Mike

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Problemchild
    0 Problemchild over 10 years ago in reply to mconners

    Exactly right although you may need to put in some IOCTL commands to setup the Sampling speed etc in the setupaudiocard section.

    Of course setting up the reverb isn't  a total give a way either image !

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • mconners
    0 mconners over 10 years ago in reply to Problemchild

    Yeah, like I said, I'm not really familiar with the Cirrus card, so I didn't know the IOCTLs to use, I figured either that or there was something in the card API to set that stuff up, he says he's already got the reverb/output part working, just needed help reading the samples, this seemed like the most unixy way to do it.

     

    Mike

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • mconners
    0 mconners over 10 years ago in reply to mconners

    Oh, one other thing to play the sound back you would open

     

    /dev/snd/pcmC0D0p

     

    the playback device

     

    and write the bytes out

     

    Mike

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Reply
  • mconners
    0 mconners over 10 years ago in reply to mconners

    Oh, one other thing to play the sound back you would open

     

    /dev/snd/pcmC0D0p

     

    the playback device

     

    and write the bytes out

     

    Mike

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Children
  • Former Member
    0 Former Member over 10 years ago in reply to mconners

    Okay, I tried opening those files in my C code and was successful, but when reading them it just returns ones for every bit (so it looks like ffffffff when I print it out in hex). What would a standard setupAudiocard function look like? I tried looking through this for help but couldn't really wrap my head around it. Would my setup have to be this long and complex? https://github.com/certik/record/blob/master/arecord.c


    Will those files automatically always be interacting with the designated input and output ports? So for example if I write something to pcmC0D0p it will automatically output it? And does that mean that the files are constantly changing?


    Thanks for the help,


    Ryan

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube