Rtttl with T88 Tiny

I have not found a form or a library that has addressed or solved this issue for the board. Any rtttl code I use for the T88 Tiny doesn't work. The buzzer is completely silent, so I have hooked up an Arduino to check the buzzer, and it works with every code I have tried. I have even probed each pin on the tiny to see if the pins are just labeled differently, and still nothing. I tried the TinyRTTTL, NonBlockingRtttl, PlayRtttl, anyrtttl, and a few other libraries and couldn't get any to work with the T88 Tiny; the buzzer makes zero sound every time. I have gotten lights to blink and buttons to work, even with Rtttl music in the code on the T88, but the music will act like it is playing, and no sound will be coming out.

Am I just going down a path with the T88 Tiny that can't happen, or is there a library or code I am missing that can allow RTTTL to be played on this board?

With all of the information you did not provide I can only suggest you swap the yellow and purple wires.

If this does not work and I do not expect it to post an annotated schematic showing exactly how you wired the project along with links to technical information on the parts you used. Since this could also be a software problem post the code using code tags.

I am not sure what other information I could provide to help you understand, @gilshultz since you have no relevant follow-up questions to my question in your response. There is no purple and yellow wire not sure what you are talking about there, unless you are just making fun of me.

I used Arduino IDE software, which has worked to upload blinking light code to the T88 Tiny. The code and setup work on my Arduino Uno board, and music plays through the speaker. However, with the same setup and pins hooked up to the T88 Tiny board and buzzer, it produces no sound through the buzzer after the same code is uploaded. I am simply wondering if anyone knows or has seen a video showing a T88 Tiny working with a buzzer to produce RTTTL music/is it even possible. I am 99% sure the problem is not code (unless there is a library I should use) or setup, which is why I didn't provide that. I just used many different variations of code to account for different libraries (TinyRTTTL, NonBlockingRtttl, PlayRtttl, anyrttt) to try and get the T88 tiny to play music through a buzzer, and nothing worked.

Here is one variation of code I tried; however, this is not what I am worried about. Pretend the schematic has a T88 tiny instead of an Arduino Micro.

#include <TinyRTTTL.h>
#define SPEAKER 9
#define OCTIVE 0

TinyRTTTL rtttl(SPEAKER, OCTIVE);
char simpsons[] = "Simpsons:d=4,o=5,b=160:c.6,e6,f#6,a6,g6,e6,c6,a,f#,f#,f#,g,p,8p,c.6,e6,f#6,a6,g6,e6,c6,a,f#,f#,f#,g,p,8p,p,2c7";

void setup() {
pinMode(SPEAKER, OUTPUT);
}

void loop() {
rtttl.play(simpsons);  
delay(500);          
}

Active or passive buzzer?

OCTAVE?

Just checking if you saw a "good" upload... to upload a sketch to ATtiny88...

  1. Disconnect the USB
  2. Compile the sketch to start the upload
  3. Wait for "insert USB within six seconds" (or something meaning that)
  4. Wait for "finished" (or something meaning that)

** I see the library spells "octave" as "octive"...

I got a few squeaks out of the simpsons song... nothing out of their own example songs, even with their example sketch... TinyRTTTL/examples/sample/sample.ino at master · jasonacox/TinyRTTTL · GitHub

Great questions. Although my main question is not for help with writing/uploading code or hooking up the buzzer, it is whether anyone knows or has seen a buzzer work with a T88 Tiny or has used a library that works with it. However, to answer your questions, if it helps, I believe it is an active buzzer. I got it from an old Arduino Uno kit, and it works perfectly when connected to an Arduino Uno, so I am assuming the problem is the T88 tiny. I have gone back and forth from the Uno to the Tiny to make sure I didn't break it, and it worked on the Uno every time.

In my initial question, I did point out that I was able to upload code to the ATtiny88 ( I used the unplug, upload wait, then insert plug method and got 100% complete prompt) to blink RGB LEDs and even control them with a button, which worked on the T88. I also had code that used blinking RGB LEDs, a button to switch between light colors, and Rtttl that uploaded successfully. With that code, if I had RTTTL playing in a case, it wouldn't let me switch to the next case till the Rtttl song was finished by design, so when uploaded to the Uno, even if I pressed the button, the next case would not activate until the music was finished playing. When put on the T88, I could switch between cases, but for about as long as the music usually lasted on the Uno I could not switch to the next case when pressing the button with the T88, even though nothing was playing through the buzzer. That told me the T88 is trying to read through rtttl code, but no sound happens. It also tells me the code is working as it should, and the pins I was connected to were right. Although with that code having variables of LED signals or libraries interfering with each other, I switched to the simpler code I posted to keep troubleshooting different libraries, and still no sound. I also tried probing other pins with the input pin that led to the buzzer and heard nothing, just in case the pins were mapped wrong.

I have tried a TinyRTTTL Library, but still no sound; maybe I can try the one you sent to see if some squeaks can get through. Here is my button and blink code with a schematic, but I am looking for the answer of if it is possible.

#include <PlayRtttl.hpp>
const int buttonPin = 2;    // Pin connected to the push button
int settingMode = 0;        // Counter for settings
int buttonState = HIGH;      // Current state of the button
int lastButtonState = HIGH;  // Previous state of the button
int redVal;
int blueVal;
int greenVal;
int LED2_redVal;
int LED2_blueVal;
int LED2_greenVal;
const int BUZZER_PIN = 5;

#define BLUE 6
#define GREEN 8
#define RED 9
#define LED2_BLUE 10
#define LED2_GREEN 11
#define LED2_RED 12
#define delayTime 20

bool played = false;

const char mission_imp[] PROGMEM = "MissionImp:d=16,o=4,b=95:32d,32z,32d,32z,32f,32z,32g,32z,32d,32z,32d,32z,32c,32z,32c#,32z";
const char Ama_Grace [] PROGMEM = "Amazing Grace:o=5,d=16,b=80,b=80:8c,2f,a,g,f,2a,8a,8g,2f,4d,2c,8c,2f,a,g,f,2a,8g,8a,2c6.";
const char Popeye [] PROGMEM = "Popeye:o=5,d=8,b=160,b=160:a5,c,c,c,4a#5,a5,4c,2p,c,d,a#5,d,4f,d,2c,p,c,d,a#5,d,f,e,d,c,d,c,a5,f5,a5,c,d,c,4a#5,g5,2f5";
const char WeAreThe [] PROGMEM = "WeAreThe:d=16,o=4,b=63:2d5,8c#5,8d5,4c#5,4a,8f#,4b,2f#,8a,2d5,8e5,8f#5,4a5,4f#5,b,2b,4b,4a,8b,4a,4g,4g5,4f#5,8g5,4f#5,4e5,4f#5,4d5,8g5,4f#5,4d5,8g5,4f5,4d5,8g5,4f5,2d5,8c5,8a,2d5";
const char WeAreThe1 [] PROGMEM = "WeAreThe1:d=4,o=5,b=100:2f,8e,8f,e,c,8p,8a4,d,a.4,2p,8c,2f,8g,8a,c6,a.,8d.,8e,2c,2p,d.,c,8d,c.,a#4,8p,a#.,a,8a#,a.,g,8p,a.,f,8a#,a.,8f,8p,8a#,g#.,f.,8a#,g#.,f.,2p";
const char WeAreThe2 [] PROGMEM = "WeAreThe2:d=4,o=5,b=80:2d,8c#,8d,c#,a4,8f#4,b4,2f#4,8a4,2d,8e,8f#,a,f#,8d,2b4,b4,a4,8b4,a4,g4,g4,f#,8g,f#,e,f#,d,8g,f#,d,8g,f,d,8g,f,2d";
const char Dead [] PROGMEM = "DeathMus:d=16,o=4,b=100:b,f5,p,f5,f5,f.5,e.5,d5,c5,g,p,e,c";
//America:d=16,o=5,b=200:4g,p,4e,4c,8p,p,4e,4p,4g,4p,4c6,2p,4p,4e6,p,4d6,4c6,4p,4e,4p,4f#,4p,2g,2p,4g,4p,2e6,4p,4d6,4c6,4p,2b,2p,4a,p,4b,4c6,4p,4e,4p,4f#,4p,4g,8p,p
//StarWars:d=4,o=5,b=112:8g,16p,8g,16p,8g,16p,16d#.,32p,32a#.,8g,16p,16d#.,32p,32a#.,g,8p,32p,8d6,16p,8d6,16p,8d6,16p,16d#.6,32p,32a#.,8f#,16p,16d#.,32p,32a#.,g,8p,32p,8g6,16p,16g.,32p,32g.,8g6,16p,16f#.6,32p,32f.6,32e.6,32d#.6,16e6,8p,16g#,32p,8c#6,16p,16c.6,32p,32b.,32a#.,32a.,16a#,8p,16d#,32p,8f#,16p,16d#.,32p,32g.,8a#,16p,16g.,32p,32a#.,d6,8p,32p,8g6,16p,16g.,32p,32g.,8g6,16p,16f#.6,32p,32f.6,32e.6,32d#.6,16e6,8p,16g#,32p,8c#6,16p,16c.6,32p,32b.,32a#.,32a.,16a#,8p,16d#,32p,8f#,16p,16d#.,32p,32g.,8g,16p,16d#.,32p,32a#.,g
//HarryPot:d=16,o=4,b=125:2p,8p,8b,8e.4,g4,8f#4,4e4,8b4,4a.4,4f#.4,8e.4,g4,8f#4,4d4,8f4,2e4,8p,8b,8e.4,g4,8f#4,4e4,8b4,4d5,8c#5,4c5,8g#4,8c.5,b4,8a#4,4f#4,8g4,2e4,8p,8g4,4b4,8g4,4b4,8g4,4c5,8b4,4a#4,8f#4,8g.4,b4,8a#4,4a#,8b,2b4,8p
void setup() {
// Use internal pull-up resistor (Button connects pin to GND)
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
pinMode(RED, OUTPUT);
pinMode(LED2_GREEN, OUTPUT);
pinMode(LED2_BLUE, OUTPUT);
pinMode(LED2_RED, OUTPUT);

digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
digitalWrite(RED, LOW);
digitalWrite(LED2_GREEN, LOW);
digitalWrite(LED2_BLUE, LOW);
digitalWrite(LED2_RED, LOW);
}

void loop() {
// Read the current state of the button
buttonState = digitalRead(buttonPin);

// Check if button state changed from HIGH to LOW (a press)
if (buttonState != lastButtonState) {
if (buttonState == LOW) {
settingMode++; // Move to next setting

  // Reset to setting 0 after reaching the limit (e.g., 5 settings)
  if (settingMode > 4) {
    settingMode = 0;
  }
  
  Serial.print("Current Mode: ");
  Serial.println(settingMode);
}
// Small delay to debounce the mechanical button
delay(50); 

}

// Save current state for next loop iteration
lastButtonState = buttonState;

// Execute different code for each setting
switch (settingMode) {
case 0:
played = false;
// Code for Setting 1 (e.g., All white with music)
int redVal = 255;
int blueVal = 255;
int greenVal = 255;
int LED2_redVal = 255;
int LED2_blueVal = 255;
int LED2_greenVal = 255;
analogWrite( GREEN, greenVal );
analogWrite( RED, redVal );
analogWrite( BLUE, blueVal );
analogWrite( LED2_GREEN, LED2_greenVal );
analogWrite( LED2_RED, LED2_redVal );
analogWrite( LED2_BLUE, LED2_blueVal );

  playRtttlBlockingPGM(BUZZER_PIN, mission_imp);
  delay(500);
  playRtttlBlockingPGM(BUZZER_PIN, Ama_Grace);
  delay(500);
  playRtttlBlockingPGM(BUZZER_PIN, Popeye);
  delay(500);
  playRtttlBlockingPGM(BUZZER_PIN, WeAreThe);
  delay(500);
  playRtttlBlockingPGM(BUZZER_PIN, WeAreThe1);
  delay(500);
  playRtttlBlockingPGM(BUZZER_PIN, WeAreThe2);
  delay(500);
  break;
case 1:
  // Code for Setting 1 (e.g., All Fade)
  redVal = 255;
  blueVal = 0;
  greenVal = 255;
  LED2_redVal = 255;
  LED2_blueVal = 0;
  LED2_greenVal = 255;

  analogWrite( GREEN, greenVal );
  analogWrite( RED, redVal );
  analogWrite( BLUE, blueVal );
  analogWrite( LED2_GREEN, LED2_greenVal );
  analogWrite( LED2_RED, LED2_redVal );
  analogWrite( LED2_BLUE, LED2_blueVal );
  break;
case 2:
  // Code for Setting 2 (e.g., LED Fade)
  redVal = 255;
  blueVal = 0;
  greenVal = 0;
  LED2_redVal = 255;
  LED2_blueVal = 0;
  LED2_greenVal = 0;
  for( int i = 0 ; i < 255 ; i += 1 ){
    greenVal += 1;
    redVal -= 1;
    LED2_greenVal += 1;
    LED2_redVal -= 1;
    analogWrite( GREEN, greenVal );
    analogWrite( RED, redVal );
    analogWrite( BLUE, blueVal );
    analogWrite( LED2_GREEN, LED2_greenVal );
    analogWrite( LED2_RED, LED2_redVal );
    analogWrite( LED2_BLUE, LED2_blueVal );
 

    delay( delayTime );
  }
 
  redVal = 0;
  blueVal = 0;
  greenVal = 255;
  LED2_redVal = 0;
  LED2_blueVal = 0;
  LED2_greenVal = 255;
  for( int i = 0 ; i < 255 ; i += 1 ){
    blueVal += 1;
    greenVal -= 1;
    LED2_greenVal -= 1;
    LED2_blueVal += 1;
    analogWrite( BLUE, blueVal );
    analogWrite( GREEN, greenVal );
    analogWrite( RED, redVal );
    analogWrite( LED2_GREEN, LED2_greenVal );
    analogWrite( LED2_RED, LED2_redVal );
    analogWrite( LED2_BLUE, LED2_blueVal );

    delay( delayTime );
  }

    redVal = 0;
    blueVal = 255;
    greenVal = 0;
    LED2_redVal = 0;
    LED2_blueVal = 255;
    LED2_greenVal = 0;
    for( int i = 0 ; i < 255 ; i += 1 ){
      redVal += 1;
      blueVal -= 1;
      LED2_redVal += 1;
      LED2_blueVal -= 1;
      analogWrite( RED, redVal );
      analogWrite( BLUE, blueVal );
      analogWrite( GREEN, greenVal );
      analogWrite( LED2_GREEN, LED2_greenVal );
      analogWrite( LED2_RED, LED2_redVal );
      analogWrite( LED2_BLUE, LED2_blueVal );
  
      delay( delayTime );
    }
  break;
case 3:
    redVal = 0;
    blueVal = 0;
    greenVal = 0;
    LED2_redVal = 0;
    LED2_blueVal = 0;
    LED2_greenVal = 0;
    for( int i = 0 ; i < 255 ; i += 1 ){
      redVal += 1;
      blueVal += 1;
      greenVal += 1;
      LED2_greenVal += 1;
      LED2_blueVal += 1;      
      LED2_redVal += 1;   
      analogWrite( RED, redVal );
      analogWrite( BLUE, blueVal );
      analogWrite( GREEN, greenVal );
      analogWrite( LED2_GREEN, LED2_greenVal );
      analogWrite( LED2_RED, LED2_redVal );
      analogWrite( LED2_BLUE, LED2_blueVal );
  
      delay( delayTime );
    }
    redVal = 255;
    blueVal = 255;
    greenVal = 255;
    LED2_redVal = 255;
    LED2_blueVal = 255;
    LED2_greenVal = 255;
    for( int i = 0 ; i < 255 ; i += 1 ){
      redVal -= 1;
      blueVal -= 1;
      greenVal -= 1;
      LED2_greenVal -= 1;
      LED2_blueVal -= 1;      
      LED2_redVal -= 1;
      analogWrite( RED, redVal );
      analogWrite( BLUE, blueVal );
      analogWrite( GREEN, greenVal );
      analogWrite( LED2_GREEN, LED2_greenVal );
      analogWrite( LED2_RED, LED2_redVal );
      analogWrite( LED2_BLUE, LED2_blueVal );
  
      delay( delayTime );
    }
  break;
case 4:
  // Code for Setting 3 (e.g., LED Solid blue)
    redVal = 0;
    blueVal = 255;
    greenVal = 0;
    LED2_redVal = 0;
    LED2_blueVal = 255;
    LED2_greenVal = 0;        
    analogWrite( GREEN, greenVal );
    analogWrite( RED, redVal );
    analogWrite( BLUE, blueVal );
    analogWrite( LED2_GREEN, LED2_greenVal );
    analogWrite( LED2_RED, LED2_redVal );
    analogWrite( LED2_BLUE, LED2_blueVal );
  break;
  
case 5:
  // Code for Setting 3 (e.g., LED Solid red)
    redVal = 255;
    blueVal = 0;
    greenVal = 0;
    LED2_redVal = 255;
    LED2_blueVal = 0;
    LED2_greenVal = 0;
    analogWrite( GREEN, greenVal );
    analogWrite( RED, redVal );
    analogWrite( BLUE, blueVal );
    analogWrite( LED2_GREEN, LED2_greenVal );
    analogWrite( LED2_RED, LED2_redVal );
    analogWrite( LED2_BLUE, LED2_blueVal );
  break;
 case 6:
  // Code for Setting 3 (e.g., LED Solid red)
    redVal = 0;
    blueVal = 0;
    greenVal = 0;
    LED2_redVal = 0;
    LED2_blueVal = 0;
    LED2_greenVal = 0;
    analogWrite( GREEN, greenVal );
    analogWrite( RED, redVal );
    analogWrite( BLUE, blueVal );
    analogWrite( LED2_GREEN, LED2_greenVal );
    analogWrite( LED2_RED, LED2_redVal );
    analogWrite( LED2_BLUE, LED2_blueVal );
    if(!played){
      playRtttlBlockingPGM(BUZZER_PIN, Dead);
      played = true;
    }
  break;

}
}

To answer this:

I couldn't tell you.

BUT regarding this:

I did a google search for T88 tiny. I kept coming up with ATTiny88. In post #3 you have the buzzer connected to D9 on the micro, which is PB5. According to the datasheet, PB5 on the ATTiny88 is physical pin #17. Your code in post #3 show #define SPEAKER 9, so I believe the ATTiny88 should be wired to physical pin 17.

Similarly, in post #5, you wrote const int BUZZER_PIN = 5, which corresponds to PC6, which is physical pin 29 on the ATTiny88, which also happens to be the reset pin. (You might consider changing this.)

That is how I learned to map the Arduino IDE pin numbers to the pins on an ATTiny85 and it works. I had to learn to "reverse map it" to get to the correct physical pin on the ATTiny85.

Hope this helps.

EDITED--The info I found above was not for a PDIP MCU. It was for TQFP and 32 MLF FOUND HERE AT MICROCHIP. And I double checked with AI (copilot) and was told that the ports didn't matter, it was all about the functionality of the pin. PWM, etc... So maybe some RI (REAL intelligence) will come along and correct me.

EDITED AGAIN--I reread post #5 and now see you said it is an ATTiny88 and your LEDs and button worked on it, so I don't know. Maybe RI will have an answer.

And there was no schematic to show what you had. T88 has many members which you failed to show. Also posting a link to the technical information on the buzzer will help us help you. The fact that it works on a UNO indicates that it functions but it does NOT indicate it will work on your T88. There are several types of them, some active some passibe.

I "burnt" out one DIO pin on an ATtiny88 and was able to use another DIO pin on the same ATtiny88.

I only really wanted to know if anyone had gotten a buzzer to play music with a T88 tiny. The other information about my troubleshooting was just to show some things I had tried, so I wouldn't get responses to what I had already tried. Here is a link to the exact Attiny88 board I have. Amazon.com: AITRIP 5pcs MH-Tiny ATTINY88 Micro Development Board 16Mhz /Digispark ATTINY85 Upgraded/Nano V3.0 ATmega328 Extended Compatible for Arduino : Electronics

How about a data sheet for the buzzer?

@EmilyJane, the Buzzer came in an old Uno kit, so I don't have the actual part number. Plus, they are a cheap manufactured in China, so it's hard to find good data sheets. This is my best guess as to what it is. Datasheet - LCSC Electronics . I was also able to get it to work great with the Uno, so I am not sure how this info helps.

Helpers like to test the exact parts that a visitor has if possible so as much information as you can supply is good.

That data sheet seems to describe an active buzzer so probably not what you have if yours produces a range of frequencies.

Reading around the internet, I saw an issue eight years ago with DrAzzy's core not resetting TIMER1... but saw no resolution to that particular issue (about the same "no sound"). A suggestion was TinyTone... Technoblogy - Simple Tones for ATtiny ... although, that does not solve the RTTTL translation to songs. Tiny steps.

https://codebender.cc/example/Tone/RTTTL#RTTTL.ino

Simple test, connect the buzzer to 5V, if it buzzes it is a buzzer, if it clicks it is a speaker. For tone you want a speaker.

Yes (finally dug out my passive speaker from storage). This melody.
** I am using pin 0 for the speaker.

#include "pitches.h"
int melody[] = {
  NOTE_C4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_G4,
  NOTE_A4, NOTE_G4, NOTE_F4, NOTE_F4, NOTE_A4, NOTE_C5, NOTE_D5,
  NOTE_D5, NOTE_C5, NOTE_A4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_G4,
  NOTE_A4, NOTE_G4, NOTE_F4, NOTE_D4, NOTE_D4, NOTE_C4, NOTE_F4,
  NOTE_D5, NOTE_C5, NOTE_A4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_G4,
  NOTE_D5, NOTE_C5, NOTE_A4, NOTE_A4, NOTE_C5, NOTE_D5,
  NOTE_D5, NOTE_C5, NOTE_A4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_G4,
  NOTE_A4, NOTE_G4, NOTE_F4, NOTE_D4, NOTE_D4, NOTE_C4, NOTE_F4
};
float noteDurations[] = {
  1.0, 1.5, 0.5, 1.0,
  1.0, 1.5, 0.5, 1.0,
  0.5, 0.5, 1.5, 0.5, 1.0,
  1.0, 3.0,
  1.0, 1.5, 0.5, 1.0,
  1.0, 1.5, 0.5, 1.0,
  0.5, 0.5, 1.5, 0.5, 1.0,
  1.0, 3.0,

  1.0, 1.5, 0.5, 1.0,
  1.0, 1.5, 0.5, 1.0,
  1.0, 1.5, 0.5, 1.0,
  1.0, 3.0,
  1.0, 1.5, 0.5, 1.0,
  1.0, 1.5, 0.5, 1.0,
  0.5, 0.5, 1.5, 0.5, 1.0,
  1.0, 3.0
};

int melodysize = sizeof(melody) / sizeof(melody[0]);
int speaker = 0;

void setup() {
  pinMode(speaker, OUTPUT);
  for (int thisNote = 0; thisNote < melodysize; thisNote++) {
    int noteDuration = 500 * noteDurations[thisNote];
    tone(speaker, melody[thisNote], noteDuration);
    int pauseBetweenNotes = noteDuration * 1.20;
    delay(pauseBetweenNotes);
    noTone(speaker);
  }
}
void loop() {
}

I am still working on your original RTTTL sketch.

[/edit] disregard... this function seems to be meant to collect the song title, but is never used[/edit]

I think I found why the RTTTL.h library does not play...

void TinyRTTTL::play_P(char *p)
{
  // pgm_read_byte(p);
  // To Do
}

Is pin 9 (your speaker pin) tied to a TIMER used to generate the tones?
** Even when I use pin 0, no tone is generated with the rtttl code.

@spaceman101

This works on my ATtiny88 using Pin 2 as the tone pin.

RTTTL.INO

// A fun sketch to demonstrate the use of the tone() function written by Brett Hagman.

// This plays RTTTL (RingTone Text Transfer Language) songs using the
// now built-in tone() command in Wiring and Arduino.
// Written by Brett Hagman
//  http://www.roguerobotics.com/

// To play the output on a small speaker (i.e. 8 Ohms or higher), simply use
// a 1K Ohm resistor from the output pin to the speaker, and connect the other
// side of the speaker to ground.

// You can get more RTTTL songs from
//  http://www.roguerobotics.com/

const int tonePin = 2;   // ATtiny88
// const int tonePin = 8;   // for rEDI board
// const int tonePin = 13;  // arbitrary for arduino boards, set this to whatever you want

#define OCTAVE_OFFSET 0

// These values can also be found as constants in the Tone library (Tone.h)
int notes[] = { 0,
                262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494,
                523, 554, 587, 622, 659, 698, 740, 784, 831, 880, 932, 988,
                1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1976,
                2093, 2217, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951 };

//char *song = "GeorgeofthejungleTheme:d=4,o=6,b=127:f5,p,p,c5,p,p,f5,p,f5,p,f5,a5,p,c,p,f5,p,f5,p,g5,g5,p,a5,p,p,p,f5,f5,f5,f5,g5,g5,p,f5,p,p,p,f";
//char *song = "OneMoreT:d=16,o=5,b=125:4e,4e,4e,4e,4e,4e,8p,4d#.,4e,4e,4e,4e,4e,4e,8p,4d#.,4e,4e,4e,4e,4e,4e,8p,4d#.,4f#,4f#,4f#,4f#,4f#,4f#,8f#,4d#.,4e,4e,4e,4e,4e,4e,8p,4d#.,4e,4e,4e,4e,4e,4e,8p,4d#.,1f#,2f#";
char *song = "The Simpsons:d=4,o=5,b=160:c.6,e6,f#6,8a6,g.6,e6,c6,8a,8f#,8f#,8f#,2g,8p,8p,8f#,8f#,8f#,8g,a#.,8c6,8c6,8c6,c6";
//char *song = "Indiana:d=4,o=5,b=250:e,8p,8f,8g,8p,1c6,8p.,d,8p,8e,1f,p.,g,8p,8a,8b,8p,1f6,p,a,8p,8b,2c6,2d6,2e6,e,8p,8f,8g,8p,1c6,p,d6,8p,8e6,1f.6,g,8p,8g,e.6,8p,d6,8p,8g,e.6,8p,d6,8p,8g,f.6,8p,e6,8p,8d6,2c6";
//char *song = "TakeOnMe:d=4,o=4,b=160:8f#5,8f#5,8f#5,8d5,8p,8b,8p,8e5,8p,8e5,8p,8e5,8g#5,8g#5,8a5,8b5,8a5,8a5,8a5,8e5,8p,8d5,8p,8f#5,8p,8f#5,8p,8f#5,8e5,8e5,8f#5,8e5,8f#5,8f#5,8f#5,8d5,8p,8b,8p,8e5,8p,8e5,8p,8e5,8g#5,8g#5,8a5,8b5,8a5,8a5,8a5,8e5,8p,8d5,8p,8f#5,8p,8f#5,8p,8f#5,8e5,8e5";
//char *song = "Entertainer:d=4,o=5,b=140:8d,8d#,8e,c6,8e,c6,8e,2c.6,8c6,8d6,8d#6,8e6,8c6,8d6,e6,8b,d6,2c6,p,8d,8d#,8e,c6,8e,c6,8e,2c.6,8p,8a,8g,8f#,8a,8c6,e6,8d6,8c6,8a,2d6";
//char *song = "Muppets:d=4,o=5,b=250:c6,c6,a,b,8a,b,g,p,c6,c6,a,8b,8a,8p,g.,p,e,e,g,f,8e,f,8c6,8c,8d,e,8e,8e,8p,8e,g,2p,c6,c6,a,b,8a,b,g,p,c6,c6,a,8b,a,g.,p,e,e,g,f,8e,f,8c6,8c,8d,e,8e,d,8d,c";
//char *song = "Xfiles:d=4,o=5,b=125:e,b,a,b,d6,2b.,1p,e,b,a,b,e6,2b.,1p,g6,f#6,e6,d6,e6,2b.,1p,g6,f#6,e6,d6,f#6,2b.,1p,e,b,a,b,d6,2b.,1p,e,b,a,b,e6,2b.,1p,e6,2b.";
//char *song = "Looney:d=4,o=5,b=140:32p,c6,8f6,8e6,8d6,8c6,a.,8c6,8f6,8e6,8d6,8d#6,e.6,8e6,8e6,8c6,8d6,8c6,8e6,8c6,8d6,8a,8c6,8g,8a#,8a,8f";
//char *song = "20thCenFox:d=16,o=5,b=140:b,8p,b,b,2b,p,c6,32p,b,32p,c6,32p,b,32p,c6,32p,b,8p,b,b,b,32p,b,32p,b,32p,b,32p,b,32p,b,32p,b,32p,g#,32p,a,32p,b,8p,b,b,2b,4p,8e,8g#,8b,1c#6,8f#,8a,8c#6,1e6,8a,8c#6,8e6,1e6,8b,8g#,8a,2b";
//char *song = "Bond:d=4,o=5,b=80:32p,16c#6,32d#6,32d#6,16d#6,8d#6,16c#6,16c#6,16c#6,16c#6,32e6,32e6,16e6,8e6,16d#6,16d#6,16d#6,16c#6,32d#6,32d#6,16d#6,8d#6,16c#6,16c#6,16c#6,16c#6,32e6,32e6,16e6,8e6,16d#6,16d6,16c#6,16c#7,c.7,16g#6,16f#6,g#.6";
//char *song = "MASH:d=8,o=5,b=140:4a,4g,f#,g,p,f#,p,g,p,f#,p,2e.,p,f#,e,4f#,e,f#,p,e,p,4d.,p,f#,4e,d,e,p,d,p,e,p,d,p,2c#.,p,d,c#,4d,c#,d,p,e,p,4f#,p,a,p,4b,a,b,p,a,p,b,p,2a.,4p,a,b,a,4b,a,b,p,2a.,a,4f#,a,b,p,d6,p,4e.6,d6,b,p,a,p,2b";
//char *song = "StarWars:d=4,o=5,b=45:32p,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#.6,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#6";
//char *song = "GoodBad:d=4,o=5,b=56:32p,32a#,32d#6,32a#,32d#6,8a#.,16f#.,16g#.,d#,32a#,32d#6,32a#,32d#6,8a#.,16f#.,16g#.,c#6,32a#,32d#6,32a#,32d#6,8a#.,16f#.,32f.,32d#.,c#,32a#,32d#6,32a#,32d#6,8a#.,16g#.,d#";
//char *song = "TopGun:d=4,o=4,b=31:32p,16c#,16g#,16g#,32f#,32f,32f#,32f,16d#,16d#,32c#,32d#,16f,32d#,32f,16f#,32f,32c#,16f,d#,16c#,16g#,16g#,32f#,32f,32f#,32f,16d#,16d#,32c#,32d#,16f,32d#,32f,16f#,32f,32c#,g#";
//char *song = "A-Team:d=8,o=5,b=125:4d#6,a#,2d#6,16p,g#,4a#,4d#.,p,16g,16a#,d#6,a#,f6,2d#6,16p,c#.6,16c6,16a#,g#.,2a#";
//char *song = "Flinstones:d=4,o=5,b=40:32p,16f6,16a#,16a#6,32g6,16f6,16a#.,16f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c6,d6,16f6,16a#.,16a#6,32g6,16f6,16a#.,32f6,32f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c6,a#,16a6,16d.6,16a#6,32a6,32a6,32g6,32f#6,32a6,8g6,16g6,16c.6,32a6,32a6,32g6,32g6,32f6,32e6,32g6,8f6,16f6,16a#.,16a#6,32g6,16f6,16a#.,16f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c.6,32d6,32d#6,32f6,16a#,16c.6,32d6,32d#6,32f6,16a#6,16c7,8a#.6";
//char *song = "Jeopardy:d=4,o=6,b=125:c,f,c,f5,c,f,2c,c,f,c,f,a.,8g,8f,8e,8d,8c#,c,f,c,f5,c,f,2c,f.,8d,c,a#5,a5,g5,f5,p,d#,g#,d#,g#5,d#,g#,2d#,d#,g#,d#,g#,c.7,8a#,8g#,8g,8f,8e,d#,g#,d#,g#5,d#,g#,2d#,g#.,8f,d#,c#,c,p,a#5,p,g#.5,d#,g#";
//char *song = "Gadget:d=16,o=5,b=50:32d#,32f,32f#,32g#,a#,f#,a,f,g#,f#,32d#,32f,32f#,32g#,a#,d#6,4d6,32d#,32f,32f#,32g#,a#,f#,a,f,g#,f#,8d#";
//char *song = "Smurfs:d=32,o=5,b=200:4c#6,16p,4f#6,p,16c#6,p,8d#6,p,8b,p,4g#,16p,4c#6,p,16a#,p,8f#,p,8a#,p,4g#,4p,g#,p,a#,p,b,p,c6,p,4c#6,16p,4f#6,p,16c#6,p,8d#6,p,8b,p,4g#,16p,4c#6,p,16a#,p,8b,p,8f,p,4f#";
//char *song = "MahnaMahna:d=16,o=6,b=125:c#,c.,b5,8a#.5,8f.,4g#,a#,g.,4d#,8p,c#,c.,b5,8a#.5,8f.,g#.,8a#.,4g,8p,c#,c.,b5,8a#.5,8f.,4g#,f,g.,8d#.,f,g.,8d#.,f,8g,8d#.,f,8g,d#,8c,a#5,8d#.,8d#.,4d#,8d#.";
//char *song = "LeisureSuit:d=16,o=6,b=56:f.5,f#.5,g.5,g#5,32a#5,f5,g#.5,a#.5,32f5,g#5,32a#5,g#5,8c#.,a#5,32c#,a5,a#.5,c#.,32a5,a#5,32c#,d#,8e,c#.,f.,f.,f.,f.,f,32e,d#,8d,a#.5,e,32f,e,32f,c#,d#.,c#";
//char *song = "DangerMo:d=4,o=5,b=355:a.,8g,a,8a,p,8a4,8p,d,p,a.,8g,a,8a,p,8a4,8p,d,p,a,a,a#,a#,a#,a#,a#,a#,a#,c6,2a,p,8a4,8p,d,p,a.,8g,a,8a,p,8a4,8p,d,p,a.,8g,a,8a,p,8a4,8p,d,p,a,a,a#,a#,a#,a#,a#,a#,a#,c6,2d6,p,8a4,8p,d,p,a.,8a,2a#.,8a#4,8p,d#,2p,a#,2a#,2f#,2d#,a#.,8a#,2b.,8b4,8p,e,2p,b,2b,2g,2e,b.,8d6,1e.6,e6,8e6,8e";
//char *song = "MissionImp:d=16,o=6,b=95:32d,32d#,32d,32d#,32d,32d#,32d,32d#,32d,32d,32d#,32e,32f,32f#,32g,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,a#,g,2d,32p,a#,g,2c#,32p,a#,g,2c,a#5,8c,2p,32p,a#5,g5,2f#,32p,a#5,g5,2f,32p,a#5,g5,2e,d#,8d";

void setup(void) {
  Serial.begin(9600);
  pinMode(tonePin, OUTPUT);
}

#define isdigit(n) (n >= '0' && n <= '9')

void play_rtttl(char *p) {
  // Absolutely no error checking in here

  byte default_dur = 4;
  byte default_oct = 6;
  int bpm = 63;
  int num;
  long wholenote;
  long duration;
  byte note;
  byte scale;

  // format: d=N,o=N,b=NNN:
  // find the start (skip name, etc)

  while (*p != ':') p++;  // ignore name
  p++;                    // skip ':'

  // get default duration
  if (*p == 'd') {
    p++;
    p++;  // skip "d="
    num = 0;
    while (isdigit(*p)) {
      num = (num * 10) + (*p++ - '0');
    }
    if (num > 0) default_dur = num;
    p++;  // skip comma
  }

  Serial.print("ddur: ");
  Serial.println(default_dur, 10);

  // get default octave
  if (*p == 'o') {
    p++;
    p++;  // skip "o="
    num = *p++ - '0';
    if (num >= 3 && num <= 7) default_oct = num;
    p++;  // skip comma
  }

  Serial.print("doct: ");
  Serial.println(default_oct, 10);

  // get BPM
  if (*p == 'b') {
    p++;
    p++;  // skip "b="
    num = 0;
    while (isdigit(*p)) {
      num = (num * 10) + (*p++ - '0');
    }
    bpm = num;
    p++;  // skip colon
  }

  Serial.print("bpm: ");
  Serial.println(bpm, 10);

  // BPM usually expresses the number of quarter notes per minute
  wholenote = (60 * 1000L / bpm) * 4;  // this is the time for whole note (in milliseconds)

  Serial.print("wn: ");
  Serial.println(wholenote, 10);


  // now begin note loop
  while (*p) {
    // first, get note duration, if available
    num = 0;
    while (isdigit(*p)) {
      num = (num * 10) + (*p++ - '0');
    }

    if (num) duration = wholenote / num;
    else duration = wholenote / default_dur;  // we will need to check if we are a dotted note after

    // now get the note
    note = 0;

    switch (*p) {
      case 'c':
        note = 1;
        break;
      case 'd':
        note = 3;
        break;
      case 'e':
        note = 5;
        break;
      case 'f':
        note = 6;
        break;
      case 'g':
        note = 8;
        break;
      case 'a':
        note = 10;
        break;
      case 'b':
        note = 12;
        break;
      case 'p':
      default:
        note = 0;
    }
    p++;

    // now, get optional '#' sharp
    if (*p == '#') {
      note++;
      p++;
    }

    // now, get optional '.' dotted note
    if (*p == '.') {
      duration += duration / 2;
      p++;
    }

    // now, get scale
    if (isdigit(*p)) {
      scale = *p - '0';
      p++;
    } else {
      scale = default_oct;
    }

    scale += OCTAVE_OFFSET;

    if (*p == ',')
      p++;  // skip comma for next note (or we may be at the end)

    // now play the note

    if (note) {
      Serial.print("Playing: ");
      Serial.print(scale, 10);
      Serial.print(' ');
      Serial.print(note, 10);
      Serial.print(" (");
      Serial.print(notes[(scale - 4) * 12 + note], 10);
      Serial.print(") ");
      Serial.println(duration, 10);
      tone(tonePin, notes[(scale - 4) * 12 + note]);
      delay(duration);
      noTone(tonePin);
    } else {
      Serial.print("Pausing: ");
      Serial.println(duration, 10);
      delay(duration);
    }
  }
}

void loop(void) {
  play_rtttl(song);
  Serial.println("Done.");
  while (1)
    ;
}

TinyRTTTL.h

//  Tiny RTTTL Song Player
//  Arduino tiny library for Playing RTTTL Songs
//
//  Author: Jason A. Cox - @jasonacox - https://github.com/jasonacox
//  Date: 9 May 2021
//

#ifndef __TINYRTTTL__
#define __TINYRTTTL__

#include <Arduino.h>

// Include PROGMEM Support
#include <inttypes.h>
#ifdef __AVR__
#include <avr/pgmspace.h>
#elif defined(ESP8266) || defined(ESP32)
#include <pgmspace.h>
#else
#define pgm_read_byte(addr) \
  (*(const unsigned char *)(addr))  // workaround for non-AVR
#endif

#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978

#define OCTAVE_OFFSET 0

const int notes[] PROGMEM = { 0,
                              NOTE_C4, NOTE_CS4, NOTE_D4, NOTE_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, NOTE_B4,
                              NOTE_C5, NOTE_CS5, NOTE_D5, NOTE_DS5, NOTE_E5, NOTE_F5, NOTE_FS5, NOTE_G5, NOTE_GS5, NOTE_A5, NOTE_AS5, NOTE_B5,
                              NOTE_C6, NOTE_CS6, NOTE_D6, NOTE_DS6, NOTE_E6, NOTE_F6, NOTE_FS6, NOTE_G6, NOTE_GS6, NOTE_A6, NOTE_AS6, NOTE_B6,
                              NOTE_C7, NOTE_CS7, NOTE_D7, NOTE_DS7, NOTE_E7, NOTE_F7, NOTE_FS7, NOTE_G7, NOTE_GS7, NOTE_A7, NOTE_AS7, NOTE_B7 };


class TinyRTTTL {

public:
  //! Initialize a TinyRTTTL object, setting the speaker output pin and octave
  //!
  //! @param pinSpk - The number of the digital pin connected to the speaker
  //! @param octave - The octave offsite
  TinyRTTTL(uint8_t pinSpk, int octave = OCTAVE_OFFSET);

  //! Initialize Speaker
  //!
  //! This method should be called once (typically in setup()) before calling any other.
  void begin();

  //! Play a RTTTL song
  //!
  //! The string contains a RTTTL formatted song to be played.
  //!
  //! @param p - Pointer to string containing RTTTL formatted song to play
  void play(char *p);

  //! Play a RTTTL song (PROGMEM space) [to do]
  //!
  //! The string contains a RTTTL formatted song to be played.
  //! This function is for reading PROGMEM read-only flash memory space instead of RAM
  //!
  //! @param song - Pointer to string containing RTTTL formatted song to play
  // void play_P(char *p);

private:
  uint8_t m_pinSpk;
  int m_octave;
};

#endif  // __TINYRTTTL__

TinyRTTL.cpp

//  Tiny RTTTL Song Player
//  Arduino tiny library for Playing RTTTL Songs
//
//  Author: Jason A. Cox - @jasonacox - https://github.com/jasonacox
//  Date: 9 May 2021
//

#include "TinyRTTTL.h"
#include <Arduino.h>

TinyRTTTL::TinyRTTTL(uint8_t pinSpk, int octave) {
  // Pin and octave offset settings
  m_pinSpk = pinSpk;
  m_octave = octave;
}

void TinyRTTTL::begin() {
  // Initialize speaker
  noTone(m_pinSpk);
}

// void TinyRTTTL::play_P(char *p)
// {
//   // pgm_read_byte(p);
//   // To Do
// }

void TinyRTTTL::play(char *p) {
  // Absolutely no error checking in here
  byte default_dur = 4;
  byte default_oct = 6;
  int bpm = 63;
  int num;
  long wholenote;
  long duration;
  byte note;
  byte scale;

  // format: d=N,o=N,b=NNN:
  // find the start (skip name, etc)
  while (*p != ':') p++;  // ignore name
  p++;                    // skip ':'

  // get default duration
  if (*p == 'd') {
    p++;
    p++;  // skip "d="
    num = 0;
    while (isdigit(*p)) {
      num = (num * 10) + (*p++ - '0');
    }
    if (num > 0) default_dur = num;
    p++;  // skip comma
  }

  // get default octave
  if (*p == 'o') {
    p++;
    p++;  // skip "o="
    num = *p++ - '0';
    if (num >= 3 && num <= 7) default_oct = num;
    p++;  // skip comma
  }

  // get BPM
  if (*p == 'b') {
    p++;
    p++;  // skip "b="
    num = 0;
    while (isdigit(*p)) {
      num = (num * 10) + (*p++ - '0');
    }
    bpm = num;
    p++;  // skip colon
  }

  // BPM usually expresses the number of quarter notes per minute
  wholenote = (60 * 1000L / bpm) * 4;  // this is the time for whole note (in milliseconds)

  // now begin note loop
  while (*p) {
    // first, get note duration, if available
    num = 0;
    while (isdigit(*p)) {
      num = (num * 10) + (*p++ - '0');
    }

    if (num) duration = wholenote / num;
    else duration = wholenote / default_dur;  // we will need to check if we are a dotted note after

    // now get the note
    note = 0;

    switch (*p) {
      case 'c':
        note = 1;
        break;
      case 'd':
        note = 3;
        break;
      case 'e':
        note = 5;
        break;
      case 'f':
        note = 6;
        break;
      case 'g':
        note = 8;
        break;
      case 'a':
        note = 10;
        break;
      case 'b':
        note = 12;
        break;
      case 'p':
      default:
        note = 0;
    }
    p++;

    // now, get optional '#' sharp
    if (*p == '#') {
      note++;
      p++;
    }

    // now, get optional '.' dotted note
    if (*p == '.') {
      duration += duration / 2;
      p++;
    }

    // now, get scale
    if (isdigit(*p)) {
      scale = *p - '0';
      p++;
    } else {
      scale = default_oct;
    }

    scale += OCTAVE_OFFSET;

    if (*p == ',')
      p++;  // skip comma for next note (or we may be at the end)

    // now play the note or rest
    if (note) {
      tone(m_pinSpk, notes[(scale - 4) * 12 + note], duration);
      delay(duration);
    } else {
      delay(duration);
    }
  }
}

Can't upload a video... sorry... but it makes a "song" (simpsons, but selectable)

Let me know if you try and if it works or fails.

The compiler complains that the songs are stored "at an address" (using *song - {}; but does not complain if you use the "array" brackets: song[] = {};

Most of the songs are too big for the ATtiny88 memory.

Thank you all for the replies. Upon a closer look, it is a passive buzzer. Sorry, I didn't have access to the speaker to look at it when I was trying to figure out what it was, and I thought it had epoxy. The photo below shows that a passive buzzer will not be sealed with epoxy, and that is what mine looks like. I did read online that putting a passive buzzer through a transistor can help amplify and keep the power steady, so I may try that. So far, I have tried many of the codes that were suggested and haven't gotten it to work. I do want to try the resetting timer1 idea, but haven't yet. The T88 Tiny does make the buzzer buzz when I connect the positive to the 5V output. It sounds like many of you have gotten yours to work, which makes me happy, so I may need to just look into the boards I am using a little bit more to figure out what I am doing wrong. I will keep you updated on if I figure out what is wrong.

@xfpd The code you posted works for my Arduino with the same buzzer, but I am still getting no sound when I plug it into the T88 Tiny board. All code loaded successfully. If I hit the reset button on the T88 Tiny, I do get some scratching sounds through the buzzer while the board resets. I am using the MH-ET LIVE Tiny88(16.0MHz) board manager with Arduino IDE to program the T88 Tiny. Is that the same one you are using? I only ask because you have Serial.print in your code, and I can't use the Serial Monitor to check anything since the board only talks to the computer for a few seconds.
@ZX80 I get errors that your code is trying to use the wrong timers for the T88 Tiny, so I didn't get it to upload.

I do have 5 different T88 Tiny boards, and I tried getting all of them to play music, but it is the same story with all. This makes me think the board manager may be the problem.