go 接口案例,音乐播放器

manager.go
//package main
package mlib
import "errors"

type MusicEntry struct {
    Id string
    Name string
    Artist string
    Source string
    Type string
}

type MusicManager struct {
    musics []MusicEntry
}

func NewMusicManager() *MusicManager{

    return &MusicManager{make([]MusicEntry,0)}
}

func (m *MusicManager) Len() int{
    return len(m.musics)
}

func (m *MusicManager ) Get(index int)  (music *MusicEntry,err error){
    if index <0 ||index >=len(m.musics){
        return nil,errors.New("index out of range")
    }
    return &m.musics[index],nil
}

func (m *MusicManager) Find(t_name string) *MusicEntry{
    if len(m.musics) ==0 {
        return nil
    }
    for _,value := range m.musics{
        if value.Name == t_name{
            return &value
        }
    }
    return nil
}

func (m *MusicManager) Add(music *MusicEntry){
    m.musics =append(m.musics,*music)
}

func (m *MusicManager)  Remove(index int) *MusicEntry{
    if index<0 ||index >=len(m.musics){
        return nil
    }

    removeMusic := &m.musics[index]

    m.musics =append ( m.musics[:index],  m.musics[index+1:]...)
    return removeMusic
}

type MusicEntry struct {
    Id string
    Name string
    Artist string
    Source string
    Type string
}

首先我们先设计一个结构体用来存储歌曲的结构,上面的musicentry就是,id代表唯一比那好,剩下的故名之意,type是便是类型.mp3.avw

我们接下来通过musicmanager以一种数组切片的方式进行管理

上面的各个函数的功能就是正常的add增减remove删除,get(index),获得第index首歌曲,len求长度,list列出所有的歌曲

mp3.go
package mp
import "fmt"
import "time"

type MP3player struct{
    stat int
    pro int
}

func (p *MP3player )Play(source string){

    p.pro=0;
    fmt.Println("MPS PLAY IS BEGINING")

    for p.pro<=100 {
        time.Sleep(100* time.Millisecond)
        fmt.Print(".")
        p.pro+=10
    }
    fmt.Println("player os ending ",source)
}

play.go
package  mp

import "fmt"

type Player interface{
    Play(source string)
}

func Play(source ,m_type string){
    var p Player
    switch m_type{
        case "MP3":
            p=&MP3player{}

        default :
            fmt.Println("the m_tye is not exits")
            return
    }
    p.Play(source)
}

type MP3player struct{
    stat int
    pro int
}

这里我们使用interface接口的形式,我们可以使用一个接口才处理多种类型的音乐,根据不同的类型的音乐,去实现不同的接口就可以了

case "MP3":
            p=&MP3player{}

像上面那样去赋值,下面通过p.play就可以调用了,至于paly,这里不能实现真正的paly,只不过是一种形式罢了

package main

import "fmt"
import "bufio"
import "os"

import "smp/mlib"
import "strings"
import "strconv"

import "smp/mp"

var lib *mlib.MusicManager
var id int=1
var ctrl,signal chan int
func set(tokens[]string){
    switch tokens[1]{
        case "list":
            for i:=0; i<lib.Len();i++{
                e,_ :=lib.Get(i)
                fmt.Println(e.Name,e.Artist,e.Source)
            }
        case  "add":
            id++
            if len(tokens)==6{
                id++
                lib.Add(&mlib.MusicEntry{strconv.Itoa(id),tokens[2],tokens[3],tokens[4],tokens[5]})
            }else{
                fmt.Println("tokens number is error")
            }
        default :
            fmt.Println("tokens[1] is error")
    }
}

func musicplay(tokens [] string){
    e :=lib.Find(tokens[1])
    if e==nil{
        fmt.Println("find failed")
        return
    }
    mp.Play(e.Source,e.Type)
}

func main(){
    fmt.Println("***************************************************being*******************************************************")
    lib =mlib.NewMusicManager()

    r :=bufio.NewReader(os.Stdin)
    fmt.Println("forof")
    for {
        rawline,_,_ :=r.ReadLine()

        line :=string(rawline)

        if line == "q" ||line =="e"{
            break
        }
        fmt.Println("wozhi")
        fmt.Println(len(line))
        fmt.Println(line)
        tokens :=strings.Split(line ," ")
        fmt.Println(tokens)
        if tokens[0] == "lib" {
            set(tokens)
        } else if tokens[0] == "play"{
            musicplay(tokens)
        }else{
            fmt.Println("this is any this stdin")
        }

    }

}

上面就是主控制流程,我们这里主要就有两个函数,一个是set主要的功能就是添加歌曲,另一个主要的功能就是播放,这两个功能都是调用前面的几个模块,我们通过import已经导入了

我们从终端输出,通过readline读取,并进行string强转,split就行分割,提取argv,之后我们就可以正常处理了

下面是这个小程序的整体结构

下面是运行的情况

时间: 2024-10-18 09:18:10

go 接口案例,音乐播放器的相关文章

在线音乐播放器-----酷狗音乐api接口抓取

首先身为一个在线音乐播放器,需要前端和数据库的搭配使用. 在数据库方面,我们没有办法制作,首先是版权问题,再加上数据量.所以我们需要借用其他网络播放器的数据库. 但是这些在线播放器,如百度,酷狗,酷我等在线音乐播放器,是不会提供他们的数据库接口的,所以这个我们需要,在线抓取这些在线音乐播放器的接口,首先,这个事情,是属于违规的.是属于侵犯这些公司的版权的.所以,不能用于商业用途 我们以酷狗音乐为例子,抓取他的连接数据库的API接口 我是用的是谷歌,进入私密模式,因为在这种模式下,不会缓存歌曲 1

网页音乐播放器接口

1.Dewplayer 音乐播放器 2.我的博客首页虾米播放器代码: <embed src="http://www.xiami.com/widget/0_1769834090/singlePlayer.swf" type="application/x-shockwave-flash" width="257" height="33" wmode="transparent"> </embed&

Swift-实现音乐播放器案例

最近用swift写了一个音乐播放器.在整理一下知识点. 1.tabview的使用.tabviewcell的UIView动画的添加 2.swift网络异步请求及数据解析 3.手势UITapGestureRecognizer的添加 4.MediaPlayer的使用 5.progressView的使用 知识点比较简单易用. github地址:DoubanMusic 错误总结: 1.添加手势时无效.是因为没有打开TapGestureRecognizer的交互.这里我监听的是这张图片. 2.self.di

手把手教你做音乐播放器(八)桌面小工具(上)

第8节 桌面小工具 桌面小工具是可以放置在主界面的.快速控制应用的小助手.例如我们的音乐小工具,它可以帮助用户在桌面上就完成音乐的暂停.播放.切换等操作,而不需要启动应用本身. 在安卓系统中,我们也常常叫它App widget. 实现一个App widget要经过以下几个步骤, 创建一个App widget类,让它继承自AppWidgetProvider,例如AnddleMusicAppWidget类: 放在res\layout目录下,为App widget的界面定义一个布局,例如anddle_

iOS开发拓展篇—音频处理(音乐播放器2)

iOS开发拓展篇—音频处理(音乐播放器2) 说明:该文主要介绍音乐播放界面的搭建. 一.跳转 1.跳转到音乐播放界面的方法选择 (1)使用模态跳转(又分为手动的和自动的) (2)使用xib并设置跳转 2.两种方法的分析 可以使用模态的方法,添加一个控制器,让这个控制器和音乐播放控制器类进行关联,脱线,设置标识符且在cell的点击事件中执行segue即可. 步骤说明: (1)在storyboard中新拖入一个控制器,然后设置和playing控制器类相关联. (2)设置手动跳转 (3)设置segue

安卓第十七天笔记--简易版本音乐播放器

title:简易版本音乐播放器 简易版本音乐播放器 1.布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="

一步一步实战HTML音乐播放器

在这里我用HTML5从头开始一步一步来制作一个简约的音乐播放器,大家可以参考一下,接下来正式开始. 音乐播放器效果 播放器分析 这里将播放器分两块来做: 视图层(html + css) 逻辑层 ( js ) 视图层分析 视图中包含: 播放器容器 播放器名称 音乐专辑图 音乐信息 歌曲名 歌手 专辑名 控制区 上一曲 播放 下一曲 播放进度条 播放时间 当前时间 歌曲总时间 音频控件 页面背景 逻辑层分析 逻辑层处理包括: 加载歌单 渲染歌曲信息 专辑图 歌曲名 歌手 专辑名 歌曲时长 歌曲音频地

Android多媒体框架对音乐播放器的支持

下面介绍一下Andriod多媒体框架对开发者提供的支持有哪些. 1. MediaScannerReceiver 这个广播接收者在接收到ACTION_BOOT_COMPLETED.ACTION_MEDIA_MOUNTED或 ACTION_MEDIA_SCANNER_SCAN_FILE 广播时对SD卡中的图片.音乐和视频文件进行了扫描,因为扫描不能影响用户使用,这里启动了一个服务MediaScannerService,扫描的文件类型如下: /* Audio */ addFileType("MP3&q

Android开发6:Service的使用(简单音乐播放器的实现)

前言 啦啦啦~各位好久不见啦~博主最近比较忙,而且最近一次实验也是刚刚结束~ 好了不废话了,直接进入我们这次的内容~ 在这篇博文里我们将学习Service(服务)的相关知识,学会使用 Service 进行后台工作, 学会使用 Service 与 Activity 进行通信,并在此知识基础上学会使用 MediaPlayer和简单的多线程编程.使用 Handle 更新 UI,并设计成功一个简单的音乐播放器. 是不是很高大上呢~一起来学习~ 基础知识 Service作为Android四大组件之一,在每

10个免费开源的JS音乐播放器插件

音乐播放器在网页设计中有时候会用到,比如一些时尚类.音乐或影视类等项目,但这些 网页播放器 插件比较少见,所以这里为大家整理一个集合,也许会有用到的时候. 下面整理的播放器有些是支持自适应的,如果需要用到微信或手机上,可根据自己需要求,选择对应的网页播放器.  ● Codrops Audio Codrops Audio 界面使用纯CSS编写,支持响应式,可以方便在桌面.平板以及手机设备上使用.界面因为是CSS编写,所以如果懂CSS样式,可以自己设计一个新的样式来修改. 演示&下载 ● Dark