Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Write a program to play a song represented as text. In Eclipse, create a package called program2 (note the lowercase first letter), in which you

Write a program to play a song represented as text. In Eclipse, create a package called program2 (note the lowercase first letter), in which you will create a program called PlaySimpleSong.

Write the program so that it:

declares and creates a symbol table using the algs31.BinarySearchST class;

reads in a file notes_frequencies.txt where each line is a pair of strings separated by whitespace. The first string is the name of a musical note and the second its sound frequency as found on a piano. For example, the note A4 is paired with the frequency 440Hz and the note C4 with the frequency 261.626Hz. As each line is read, an entry is made in the symbol table where the note name is the key and the frequency is the value.

reads in a song file, where each line contains a note name and a duration in seconds, separated by whitespace. A sample file is sample_simple_song.txt, which plays every C for half a second. Another song you might try is lotr.txt. Looking up the frequency corresponding to the note name, the program calls the method below to play the note.

Both the notes and frequencies file and the song file should be placed into the Eclipse data directory and, as in the GPA program, read in using StdIn and the fromFilemethod.

To process a text file where each line contains a fixed set of data fields:

use the method readLine in the StdIn class, which returns a string;

split the string into an array of strings using the instance method split in the String class;

convert the numeric strings into numeric values using the method parseDouble in the Double class.

To play each note, place into your program and call this method:

 public static void playTone(double frequency, double duration) { final int sliceCount = (int) (StdAudio.SAMPLE_RATE * duration); final double[] slices = new double[sliceCount+1]; for (int i = 0; i <= sliceCount; i++) { slices[i] = Math.sin(2 * Math.PI * i * frequency / StdAudio.SAMPLE_RATE); } StdAudio.play(slices); } 

You will also have to import stdlib.StdAudio: http://introcs.cs.princeton.edu/java/stdlib/javadoc/StdAudio.html

sample_simple_song.txt

C1 0.5 C2 0.5 C3 0.5 C4 0.5 C5 0.5 C6 0.5 C7 0.5 C8 0.5 

notes_frequencies.txt

A0 27.5 A#0 29.1353 B0 30.8677 C1 32.7032 C#1 34.6479 D1 36.7081 D#1 38.8909 E1 41.2035 F1 43.6536 F#1 46.2493 G1 48.9995 G#1 51.913A1 55 A#1 58.2705 B1 61.7354 C2 65.4064 C#2 69.2957 D2 73.4162 D#2 77.7817 E2 82.4069 F2 87.3071 F#2 92.4986 G2 97.9989 G#2 103.826 A2 110 A#2 116.541 B2 123.471 C3 130.813 C#3 138.591 D3 146.832 D#3 155.563 E3 164.814 F3 174.614 F#3 184.997 G3 195.998 G#3 207.652 A3 220 A#3 233.082 B3 246.942 C4 261.626 C#4 277.183 D4 293.665 D#4 311.127 E4 329.628 F4 349.228 F#4 369.994 G4 391.995 G#4 415.305 A4 440 A#4 466.164 B4 493.883 C5 523.251 C#5 554.365 D5 587.33 D#5 622.254 E5 659.255 F5 698.456 F#5 739.989 G5 783.991 G#5 830.609 A5 880 A#5 932.328 B5 987.767 C6 1046.5 C#6 1108.73 D6 1174.66 D#6 1244.51 E6 1318.51 F6 1396.91 F#6 1479.98 G6 1567.98 G#6 1661.22 A6 1760 A#6 1864.66 B6 1975.53 C7 2093 C#7 2217.46 D7 2349.32 D#7 2489.02 E7 2637.02 F7 2793.83 F#7 2959.96 G7 3135.96 G#7 3322.44 A7 3520 A#7 3729.31 B7 3951.07 C8 4186.01

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Modern Database Management

Authors: Fred R. McFadden, Jeffrey Slater, Mary B. Prescott

5th Edition

0805360549, 978-0805360547

More Books

Students also viewed these Databases questions

Question

Define co-ordination?

Answered: 1 week ago

Question

What are the role of supervisors ?

Answered: 1 week ago