Newer
Older
Intro-Q-2025-ver2 / public / music / music_server.rb
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'webrick'
require 'json' # JSONを使うので追加

# mp3のMIMEタイプを設定
WEBrick::HTTPUtils::DefaultMimeTypes.store('mp3', 'audio/mpeg')

# 音楽ファイルがあるディレクトリ
music_dir = "C:\Users\soets\Intro-Q-2025-ver2-main\public\music"

server = WEBrick::HTTPServer.new(
  Port: 8890,
  # DocumentRootは使わないのでコメントアウトしてもOK
  # DocumentRoot: music_dir,
  BindAddress: '0.0.0.0',
  AccessLog: [],
  Logger: WEBrick::Log.new($stdout, WEBrick::Log::INFO)
)

# ▼▼▼ ここから新しい仕事を追加 ▼▼▼

# 1. 曲リストをJSONで返す仕事
server.mount_proc '/music_list.json' do |req, res|
  files = Dir.glob(File.join(music_dir, "*.{mp3,wav,ogg}"))
             .map { |f| File.basename(f) }
             .sort_by { |f| f[/^\d+/].to_i }
  res['Content-Type'] = 'application/json'
  res['Access-Control-Allow-Origin'] = '*' # 他のサーバーからのアクセスを許可
  res.body = { files: files }.to_json
end

# 2. 音楽ファイルを返す仕事
server.mount_proc '/' do |req, res|
  # リクエストされたパスとmusic_dirを結合
  path = File.join(music_dir, req.path)

  if File.exist?(path) && !File.directory?(path)
    res.body = File.open(path, 'rb', &:read)
  else
    res.status = 404
    res.body = 'Not Found'
  end
end

# ▲▲▲ 追加ここまで ▲▲▲


trap('INT') { server.shutdown }

puts "Music server (with list) started at http://localhost:8890/"
server.start