#!/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/Intro2025/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