Sponsored Content
Operating Systems OS X (Apple) A Bash Audio Sweep Generator... Post 302912511 by wisecracker on Friday 8th of August 2014 04:43:29 PM
Old 08-08-2014
Hi all...

This building block generates a RAW sinewave and will be the basis of a sinewave sweep generator.

This is also proof of concept and is issued as Public Domain. The final draft will have pseudo-variable bit rates for varying frequency ranges. This is the default mode, 8 bit depth, mono, 8000Hz sampling rate.

Enjoy finding simple solutions to often very difficult questions...

Bazza.
Code:
#!/bin/bash
# calcsine.sh
clear
> /tmp/sinefloat
> /tmp/sine.raw
> /tmp/ascii
angle=0
step=45
text=""
line=""
# Create an 8 plot floating point sinewave table, I couldn't get "scale=0" to work correctly.
while [ $angle -le 359 ]
do
	bc -l <<< "{sin=((s($angle*6.2832/360)*47)+79); print sin,\"\\n\"}" >> /tmp/sinefloat
	#angle=$[ ( $angle + $step ) ]
	angle=$((angle+step))
done
cat < /tmp/sinefloat
echo ""
# Import each flaoting point line, create an integer value, convert to ASCII and save.
while read line
do
	printf "${line/.*}\n"
	#printf \\`printf '%03o' ${line/.*}` >> /tmp/ascii
	printf \\$(printf '%03o' ${line/.*}) >> /tmp/ascii
done < /tmp/sinefloat
# Now generate a 65536 byte RAW sinewave file using ASCII only.
read text < /tmp/ascii
echo ""
echo "Sinewave text string: $text"
for n in {1..13}
do
	text=$text$text
done
printf "$text" > /tmp/sine.raw
# For /dev/dsp users.
# cat < /tmp/sine.raw > /dev/dsp
# For SOX users, note this my SOX path you will have to edit your own...
/Users/barrywalker/Downloads/sox-14.4.0/play -v 1 -r 8000 -b 8 -c 1 -e unsigned-integer /tmp/sine.raw

Results of this demo, note the "clear" command has been edited out:-
Code:
Last login: Fri Aug  8 21:28:59 on ttys000
AMIGA:barrywalker~> ./calcsine.sh
79.00000000000000000000
112.23407975339525893445
125.99999999968292776011
112.23383560221254681395
78.99965471872028531385
45.76567609721566368521
32.00000000285365015760
45.76640855076378687120

79
112
125
112
78
45
32
45

Sinewave text string: Op}pN- -

/tmp/sine.raw:

 File Size: 65.5k     Bit Rate: 64.0k
  Encoding: Unsigned PCM  
  Channels: 1 @ 8-bit    
Samplerate: 8000Hz       
Replaygain: off         
  Duration: 00:00:08.19  

In:100%  00:00:08.19 [00:00:00.00] Out:361k  [======|======] Hd:2.4 Clip:0    
Done.
AMIGA:barrywalker~> _

 

8 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Error with Audio Conversion Bash Script

Good evening, I'm currently working on a BASH script to convert audio between file formats and I've come across a snag. At the beginning of the script, I'm having the system check to see if any files with the .m4a extension exist in the directory, and if so, it runs the script. If there are no... (1 Reply)
Discussion started by: KBurkholder
1 Replies

2. Programming

Python, Platform Independent, Pure Audio Sinewave Generator...

IKHz_SW_OSX.py A DEMO mono _pure_ sinewave generator using standard text mode Python 2.6.7 to at least 2.7.3. This code is EASILY modifyable to Python version 3.x.x... This DEMO kids level 1KHz generator is mainly for a MacBook Pro, (13 inch in my case), OSX 10.7.5 and above. See below...... (0 Replies)
Discussion started by: wisecracker
0 Replies

3. Shell Programming and Scripting

A Crude 1KHz Audio Sinewave Generator Demo...

A very simple crude sinewave generator. The file required is generated inside the code, is linear interpolated and requires /dev/audio to work. Ensure you have this device, if not the download oss-compat from your OS's repository... It lasts for about 8 seconds before exiting and saves a... (5 Replies)
Discussion started by: wisecracker
5 Replies

4. Shell Programming and Scripting

IP Ping Sweep

I put this together to search for unused IP addresses on a router. It's run as a Bash Command on OSX 10.9. Basically the user inputs the router address' IP range to sweep. 'jot' spits out a list of IP addresses based on that input and each one of those gets pinged. The output looks like this (tab... (4 Replies)
Discussion started by: sudo
4 Replies

5. Slackware

Problems with audio recording in Audacity 2.0.5. Slackware64 14.1; Intel HD Audio.

I'm trying to record audio using Audacity 2.0.5 installed from SlackBuilds. My system is 64-bit Slackware 14.1 and a sound card is Intel HD Audio. I didn't change my sound system to OSS. (Default sound system in Slackware 14.1 is ALSA, isn't it?) First, I set Internal Microphone slider in KMix... (2 Replies)
Discussion started by: qzxcvbnm
2 Replies

6. OS X (Apple)

An Audio Function Generator...

Ok guys, gals and geeks... As from today I am starting to learn awk in earnest doing something totally different. I am going to create a pseudo-Audio_Function Generator centred around OSX 10.11.x minimum. The code below is a tester to see what the possibilities are. All waveforms will be... (11 Replies)
Discussion started by: wisecracker
11 Replies

7. OS X (Apple)

Variable frequency audio generator...

Hi all... I intend to do an Audio Function Generator using Awk, (already started thanks to Don), but the biggest thing I have struggled with was variable frequency. I was going to generate differing sized waveforms on the fly but that would that would mean the frequencies are dependent on any... (2 Replies)
Discussion started by: wisecracker
2 Replies

8. OS X (Apple)

A simple variable frequency sinewave audio generator.

Hi all... Well I have not been inactive but working out how to make OSX 10.14.x command line audio player have a variable sample rate. This is a back door as afplay does not have a sample rate flag unlike aplay for ALSA, in Linux flavours. This is a DEMO only but a derivative of it will... (2 Replies)
Discussion started by: wisecracker
2 Replies
audiohd(7D)							      Devices							       audiohd(7D)

NAME
audiohd - HD audio controller generic codec audio core support.. DESCRIPTION
The audiohd driver provides support for the generic codec chips which are compatible with the Intel High-Definition Audio Controller 1.0 specification. API
This interface is described in the mixer(7I) and audio(7I) manual pages. Driver Versions Applications that open /dev/audio may use the AUDIO_GETDEV ioctl(2) to determine which audio device is being used. The audiohd driver returns the string SUNW,audiohd in the name field of the audio_device structure. The version field contains a letter "a" and the config field contains the string onboard1. Platform Ver. Out H. Phone Spkr. In Mic. CD x86/64 w/MCP HD audio a Y Y Y Y Y Y Key to the above table: Ver. = Version. Out = Line Out. H. Phone = Head Phone. Spkr = Internal Speaker. In = Line In. Mic. = Microphone. CD = CD=ROM. The audiohd device provides support for the internal speaker, headphone, line out, line in, microphone and replicated front panel audio parts. The play.mod_ports and record.mod_ports fields of the audio_info structure (see audio(7I)) indicate which ports may be manipulated. Audio Mixer Mode This driver supports the mixer mode only. (Compat mode is not supported). Audio Data Formats The audiohd device supports 16-bit linear encodings in stereo. With the mixer enabled, a continuous range of sample rates from 5510 to 48000 Hz is supported. With the mixer disabled, only sample rate 48000 Hz is supported. Sample Granularity Because the audiohd device follows the Intel HD Audio specification, buffers of audio data are supplied by streams and the reported input and output sample counts vary at any given time from the actual sample count by no more than the size of the buffers the audiohd driver is transferring. As a rule, programs should not rely on the absolute accuracy of the play.samples and record.samples fields of the audio_info structure. Interrupt Rate The driver determines how often play and record interrupts should take place. For playing audio, this determines how often and how much audio is requested from the audio mixer. The impact of interrupts on recording is minimal. However, if a very small read buffer size is set, the record interrupt rate should be increased to prevent the buffer from overflowing. You can use the /kernel/drv/audiohd.conf file to tune the play and record interrupt rates. Audio Status Change Notification As described in the audio(7I) and mixer(7I) man pages, it is possible to request asynchronous notification of changes in the state of an audio device. ERRORS
audiohd errors are described in the audio(7I) man page. FILES
/dev/audio Symbolic link to the system's primary audio device. (Not necessarily an audiohd audio device). /dev/audioctl Control device for the primary audio device. /dev/sound/0 Represents the first audio device on the system. (Not necessarily an audiohd audio device). /dev/sound/0ctl Audio control for /dev/sound/0. /usr/share/audio/samples Audio sample files. /kernel/drv/audiohd.conf audiohd driver configuration file. ATTRIBUTES
See attributes(5) for a descriptions of the following attributes: +--------------------+--------------------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +--------------------+--------------------------------------+ |Architecture |PC-based system | +--------------------+--------------------------------------+ |Availability |SUNWaudd, SUNWauda | +--------------------+--------------------------------------+ |Stability level |Evolving | +--------------------+--------------------------------------+ SEE ALSO
mixerctl(1), sdtaudiocontrol(1), ioctl(2), attributes(5), audio(7I), mixer(7I), streamio(7I) Intel High-Definition Audio Specification 1.0. - Intel Corporation ALC880 Specification -- Realtek Inc. http://www.sun.com/io DIAGNOSTICS
In addition to being logged, the following messages may appear on the system console: init_state() play interrupt rate set too low The play interrupt rate in audiohd.conf is set too low. It has been reset to the rate specified in the message. Updateaudiohd.conf to a higher play interrupt rate. init_state() play interrupt rate set too high The play interrupt rate set in audio810.conf is set too high. It has been reset to the rate specified in the message. Updateau- diohd.conf to a lower play interrupt rate. init_state() record interrupt rate set too low The record interrupt rate inaudiohd.conf is set too low. It has been reset to the rate specified in the message. Update audio810.conf to a higher record interrupt rate. init_state() record interrupt rate set too high The record interrupt rate in audiohd.conf is set too high. It has been reset to the rate specified in the message. Updateaudiohd.conf to a lower record interrupt rate. SunOS 5.11 12 Sep 2008 audiohd(7D)
All times are GMT -4. The time now is 08:11 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy