ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2.11 Go音乐播放器

2022-02-28 10:01:49  阅读:244  来源: 互联网

标签:播放器 index 音乐库 return string musics 音乐 Go 2.11


2.11 Go音乐播放器

使用Go语言设计一个音乐播放器(不带GUI界面)

实现功能:

  • 音乐库功能,使用者可以查看、添加和删除里面的音乐曲目;

  • 播放音乐;

  • 支持MP3WAV,但也能随时扩展以支持更多的音乐类型;

  • 退出程序。

程序在运行后进入一个循环,用于监听命令输入的状态。该程序将接受以下命令。

  • 音乐库管理命令:lib,包括list/add/remove命令。

  • 播放管理:play命令,play后带歌曲名参数。

  • 退出程序:q命令。

设计音乐库类型

五个属性:

  • 唯一的 ID;

  • 音乐名;

  • 艺术家名;

  • 音乐位置;

  • 音乐文件类型(MP3 和 WAV 等)。

/* 构建音乐类型结构体 */
type Music struct {
   Id string
   Name string
   Artist string
   Source string
   Type string
}

开始实现音乐库的管理类型模块:

/*
使用了一个数组切片作为基础存储结构,其他的操作其实都只是对这个数组切片的包装
*/
package main

import "errors"

/* 构建音乐类型结构体 */
type Music struct {
   Id string
   Name string
   Artist string
   Source string
   Type string
}

//type MusicEntry []string

/* 实现音乐库的管理类型 */
/*
使用了一个数组切片作为基础存储结构,其他的操作其实都只是对这个数组切片的包装
*/
type MusicManager struct {
   musics []Music
}

// 创建音乐库对象
func NewMusicManager() *MusicManager {
   return &MusicManager{make([]Music, 0)}
}

/* 定义音乐库类型下的函数 */
// 获取音乐库类型下的函数
func (m *MusicManager) Len() int {
   return len(m.musics)
}

// 根据索引获取音乐
func (m *MusicManager) Get(index int) (music *Music, err error) {
   // 判断形参,手动返回错误内容
   if index < 0 || index >= len(m.musics) {
       return nil, errors.New("索引超过音乐库下标值!")
  }

   // 返回正常的索引结果
   return &m.musics[index], nil
}

// 根据名称查找音乐
func (m *MusicManager) Find(name string) *Music {
   // 判断音乐库是否为空,如果为空则直接返回空
   if len(m.musics) == 0 {
       return nil
  }

   // 循环取值对比
   for _, m := range m.musics {
       if m.Name == name {
           return &m
      }
  }

   return nil
}

// 添加音乐函数
func (m *MusicManager) Add(music *Music) {
   m.musics = append(m.musics, *music)
}

// 删除音乐库中音乐
func (m *MusicManager) Remove(index int) *Music {
   // 判断索引
   if index < 0 || index > len(m.musics) {
       return nil
  }

   // 根据索引创建删除对象
   removedMusic := &m.musics[index]

   // 从数组切片当中删除
   /*
   1、删除中间元素
   2、删除仅有的一个元素
   3、删除最后一个元素
    */
   if index < len(m.musics)-1 {
       // 中间元素
       m.musics = append(m.musics[:index-1], m.musics[index+1:]...)
  }else if index == 0 {
       // 仅有一个元素
       m.musics = make([]Music, 0)
  }else {
       // 删除最后一个元素
       m.musics = m.musics[:index-1]
  }

   return removedMusic
}

音乐播放

设计并实现音乐播放模块:

/* 设计一个简单的播放接口 */
type Player interface {
   Play(source string)
}

// 设置一个MP3Player结构体
type MP3Player struct {
   stat int
   progress int // 进度
}

// 设置mp3player实现player接口下的函数
func (p *MP3Player) Play(source string) {
   fmt.Println("听MP3音乐", source)
   // 设置音乐进度
   p.progress = 0
   // 模拟正在播放
   for p.progress < 100 {
       time.Sleep(100 * time.Millisecond)
       fmt.Println(".")
       p.progress += 10
  }

   fmt.Println("\n结束播放", source)
}

// 声明play函数
func Play(source, mtype string) {
   // 声明一个player类型的变量
   var p Player
   // 设置断言
   switch mtype {
   case "MP3":
       p = &MP3Player{}
   default:
       fmt.Println("未知类型!", mtype)
       return
  }

   // 播放音乐
   p.Play(source)
}

主程序

一个命令行交互程序,用户可以通过输入命令来控制播放过程以及获取播放信息

func main() {
   fmt.Scanln()
}

 

标签:播放器,index,音乐库,return,string,musics,音乐,Go,2.11
来源: https://www.cnblogs.com/JunkingBoy/p/15944343.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有