WTCB
![]() |
|
City of license | Orangeburg, South Carolina |
---|---|
Broadcast area | Columbia & The Midlands |
Branding | B106.7 |
Slogan | Today’s Hits and Now More of Yesterday’s Favorites |
Frequency | 106.7 MHz |
First air date | July 6, 1967 (as WDIX-FM) |
Format | Adult contemporary |
ERP | 100,000 watts |
HAAT | 240 meters |
Class | C1 |
Facility ID | 54791 |
Callsign meaning | We're The Carolinas' Best |
Former callsigns |
WDIX-FM (1967-1976) WPJS (1976-1982) WIGL (1982-1985) |
Owner |
Cumulus Media (Radio License Holding CBC, LLC) |
Sister stations | WISW, WLXC, WOMG, WNKT |
Webcast | Listen Live |
Website | b106fm.com |
WTCB is an adult contemporary radio station licensed to Orangeburg, South Carolina and serves the Columbia, South Carolina market. The Cumulus Media outlet is licensed by the Federal Communications Commission (FCC) to broadcast at 106.7 MHz with an effective radiated power (ERP) of 100 kW. The station goes by the name B106.7 and its current slogan is "Today's Best Music". Its studios are located on Gervais Street in downtown Columbia and the transmitter is in Swansea.
History
106.7 signed on July 6, 1967 as WDIX-FM, the sister to WDIX AM 1150 in Orangeburg (formerly WRNO, now off the air).[1][2] The station was known as W-107 and was owned by Frank Best. At the time, the station featured an automated format with music that would be considered today as Hot Adult Contemporary.
In late 1976, both stations were sold to Radio Smiles, a group owned by Norman Suttles. WDIX changed to Top 40, while WDIX-FM became religious WPJS (the call sign meaning "W"e "P"roclaim "J"esus "S"aves). In 1978, the transmitting power was increased from 37 kw to 100 kw utilizing a new CCA transmitter and 10-bay Shively antenna.
In 1982, both WDIX & WPJS were sold to Keymarket Group. WPJS became country WIGL (Wiggle 106), utilizing TM's (now Jones TM) "3-In-A-Row" Modern Country format, operating it live-assisted. WIGL also made a concerted effort to target Columbia, but was plagued with periodical audio problems as well as fierce competition from WCOS-FMrequire('Module:No globals')
local p = {}
-- articles in which traditional Chinese preceeds simplified Chinese local t1st = { ["228 Incident"] = true, ["Chinese calendar"] = true, ["Lippo Centre, Hong Kong"] = true, ["Republic of China"] = true, ["Republic of China at the 1924 Summer Olympics"] = true, ["Taiwan"] = true, ["Taiwan (island)"] = true, ["Taiwan Province"] = true, ["Wei Boyang"] = true, }
-- the labels for each part local labels = { ["c"] = "Chinese", ["s"] = "simplified Chinese", ["t"] = "traditional Chinese", ["p"] = "pinyin", ["tp"] = "Tongyong Pinyin", ["w"] = "Wade–Giles", ["j"] = "Jyutping", ["cy"] = "Cantonese Yale", ["poj"] = "Pe̍h-ōe-jī", ["zhu"] = "Zhuyin Fuhao", ["l"] = "literally", }
-- article titles for wikilinks for each part local wlinks = { ["c"] = "Chinese language", ["s"] = "simplified Chinese characters", ["t"] = "traditional Chinese characters", ["p"] = "pinyin", ["tp"] = "Tongyong Pinyin", ["w"] = "Wade–Giles", ["j"] = "Jyutping", ["cy"] = "Yale romanization of Cantonese", ["poj"] = "Pe̍h-ōe-jī", ["zhu"] = "Bopomofo", }
-- for those parts which are to be treated as languages their ISO code local ISOlang = { ["c"] = "zh", ["t"] = "zh-Hant", ["s"] = "zh-Hans", ["p"] = "zh-Latn-pinyin", ["tp"] = "zh-Latn", ["w"] = "zh-Latn-wadegile", ["j"] = "yue-jyutping", ["cy"] = "yue", ["poj"] = "hak", ["zhu"] = "zh-Bopo", }
local italic = { ["p"] = true, ["tp"] = true, ["w"] = true, ["j"] = true, ["cy"] = true, ["poj"] = true, } -- Categories for different kinds of Chinese text local cats = { ["c"] = "", ["s"] = "", ["t"] = "", }
function p.Zh(frame) -- load arguments module to simplify handling of args local getArgs = require('Module:Arguments').getArgs local args = getArgs(frame) return p._Zh(args) end function p._Zh(args) local uselinks = not (args["links"] == "no") -- whether to add links local uselabels = not (args["labels"] == "no") -- whether to have labels local capfirst = args["scase"] ~= nil
local t1 = false -- whether traditional Chinese characters go first local j1 = false -- whether Cantonese Romanisations go first local testChar if (args["first"]) then for testChar in mw.ustring.gmatch(args["first"], "%a+") do if (testChar == "t") then t1 = true end if (testChar == "j") then j1 = true end end end if (t1 == false) then local title = mw.title.getCurrentTitle() t1 = t1st[title.text] == true end
-- based on setting/preference specify order local orderlist = {"c", "s", "t", "p", "tp", "w", "j", "cy", "poj", "zhu", "l"} if (t1) then orderlist[2] = "t" orderlist[3] = "s" end if (j1) then orderlist[4] = "j" orderlist[5] = "cy" orderlist[6] = "p" orderlist[7] = "tp" orderlist[8] = "w" end -- rename rules. Rules to change parameters and labels based on other parameters if args["hp"] then -- hp an alias for p ([hanyu] pinyin) args["p"] = args["hp"] end if args["tp"] then -- if also Tongyu pinyin use full name for Hanyu pinyin labels["p"] = "Hanyu Pinyin" end if (args["s"] and args["s"] == args["t"]) then -- Treat simplified + traditional as Chinese if they're the same args["c"] = args["s"] args["s"] = nil args["t"] = nil elseif (not (args["s"] and args["t"])) then -- use short label if only one of simplified and traditional labels["s"] = labels["c"] labels["t"] = labels["c"] end local body = "" -- the output string local params -- for creating HTML spans local label -- the label, i.e. the bit preceeding the supplied text local val -- the supplied text -- go through all possible fields in loop, adding them to the output for i, part in ipairs(orderlist) do if (args[part]) then -- build label label = "" if (uselabels) then label = labels[part] if (capfirst) then label = mw.language.getContentLanguage():ucfirst(. In 1984, Suburban Radio Group of
- Articles containing Chinese-language text
- Articles containing simplified Chinese-language text
- Articles containing traditional Chinese-language text
- All articles with unsourced statements
- Articles with unsourced statements from December 2008
- Hatnote templates with errors
- Articles using Template:Background color with invalid colour combination
- Coordinates not on Wikidata
- Radio stations in South Carolina
- Cumulus Media radio stations
- Adult contemporary radio stations in the United States
- Radio stations established in 1967
|
- B106.7 official website
- Query the FCC's FM station database for WTCB
- Radio-Locator information on WTCB
- Query Nielsen Audio's FM station database for WTCB
External links
- ^
- ^
- ^ Ted DeAdwyler, "WPEG Owners Keep Radio Chain Young, Aggressive," The Charlotte Observer, March 9, 1986.
- ^
- ^ http://radioinsight.com/blog/headlines/84237/wtcb-columbia-freshens-up/
end
', table.concat(classes, ' '), s )function p.hatnote(frame) local args = getArgs(frame) local s = args[1] local options = {} if not s then return p.makeWikitextError( 'no text specified', 'Template:Hatnote#Errors', args.category ) end options.extraclasses = args.extraclasses options.selfref = args.selfref return p._hatnote(s, options) end
-- Hatnote -- -- Produces standard hatnote text. Implements the template.
function p._formatLink(link, display) -- Find whether we need to use the colon trick or not. We need to use the -- colon trick for categories and files, as otherwise category links -- categorise the page and file links display the file. checkType('_formatLink', 1, link, 'string') checkType('_formatLink', 2, display, 'string', true) link = removeInitialColon(link) local namespace = p.findNamespaceId(link, false) local colon if namespace == 6 or namespace == 14 then colon = ':' else colon = end -- Find whether a faux display value has been added with the | magic -- word. if not display then local prePipe, postPipe = link:match('^(.-)|(.*)$') link = prePipe or link display = postPipe end -- Find the display value. if not display then local page, section = link:match('^(.-)#(.*)$') if page then display = page .. ' § ' .. section end end -- Assemble the link. if display then return string.format('%s', colon, link, display) else return string.format('%s%s', colon, link) end end
function p.formatLink(frame) local args = getArgs(frame) local link = args[1] local display = args[2] if not link then return p.makeWikitextError( 'no link specified', 'Template:Format hatnote link#Errors', args.category ) end return p._formatLink(link, display) end
-- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the template.
function p.makeWikitextError(msg, helpLink, addTrackingCategory) -- Formats an error message to be returned to wikitext. If -- addTrackingCategory is not false after being returned from -- Module:Yesno, and if we are not on a talk page, a tracking category -- is added. checkType('makeWikitextError', 1, msg, 'string') checkType('makeWikitextError', 2, helpLink, 'string', true) yesno = require('Module:Yesno') local title = mw.title.getCurrentTitle() -- Make the help link text. local helpText if helpLink then helpText = ' (help)' else helpText = end -- Make the category text. local category if not title.isTalkPage and yesno(addTrackingCategory) ~= false then category = 'Hatnote templates with errors' category = string.format( '%s:%s', mw.site.namespaces[14].name, category ) else category = end return string.format( '%s', msg, helpText, category ) end
function p.formatPageTables(...) -- Takes a list of page/display tables and returns it as a list of -- formatted links. Nil values are not allowed. local pages = {...} local links = {} for i, t in ipairs(pages) do checkType('formatPageTables', i, t, 'table') local link = t[1] local display = t[2] links[i] = p._formatLink(link, display) end return links end
function p.formatPages(...) -- Formats a list of pages using formatLink and returns it as an array. Nil -- values are not allowed. local pages = {...} local ret = {} for i, page in ipairs(pages) do ret[i] = p._formatLink(page) end return ret end
function p.findNamespaceId(link, removeColon) -- Finds the namespace id (namespace number) of a link or a pagename. This -- function will not work if the link is enclosed in double brackets. Colons -- are trimmed from the start of the link by default. To skip colon -- trimming, set the removeColon parameter to true. checkType('findNamespaceId', 1, link, 'string') checkType('findNamespaceId', 2, removeColon, 'boolean', true) if removeColon ~= false then link = removeInitialColon(link) end local namespace = link:match('^(.-):') if namespace then local nsTable = mw.site.namespaces[namespace] if nsTable then return nsTable.id end end return 0 end
local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end
local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end
-- Helper functions
local p = {}
local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local mArguments -- lazily initialise Module:Arguments local yesno -- lazily initialise Module:Yesno
return p-------------------------------------------------------------------------------- -- Module:Hatnote -- -- -- -- This module produces hatnote links and links to related articles. It -- -- implements the and meta-templates and includes -- -- helper functions for other Lua hatnote modules. --
end
', table.concat(classes, ' '), s )function p.hatnote(frame) local args = getArgs(frame) local s = args[1] local options = {} if not s then return p.makeWikitextError( 'no text specified', 'Template:Hatnote#Errors', args.category ) end options.extraclasses = args.extraclasses options.selfref = args.selfref return p._hatnote(s, options) end
-- Hatnote -- -- Produces standard hatnote text. Implements the template.
function p._formatLink(link, display) -- Find whether we need to use the colon trick or not. We need to use the -- colon trick for categories and files, as otherwise category links -- categorise the page and file links display the file. checkType('_formatLink', 1, link, 'string') checkType('_formatLink', 2, display, 'string', true) link = removeInitialColon(link) local namespace = p.findNamespaceId(link, false) local colon if namespace == 6 or namespace == 14 then colon = ':' else colon = end -- Find whether a faux display value has been added with the | magic -- word. if not display then local prePipe, postPipe = link:match('^(.-)|(.*)$') link = prePipe or link display = postPipe end -- Find the display value. if not display then local page, section = link:match('^(.-)#(.*)$') if page then display = page .. ' § ' .. section end end -- Assemble the link. if display then return string.format('%s', colon, link, display) else return string.format('%s%s', colon, link) end end
function p.formatLink(frame) local args = getArgs(frame) local link = args[1] local display = args[2] if not link then return p.makeWikitextError( 'no link specified', 'Template:Format hatnote link#Errors', args.category ) end return p._formatLink(link, display) end
-- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the template.
function p.makeWikitextError(msg, helpLink, addTrackingCategory) -- Formats an error message to be returned to wikitext. If -- addTrackingCategory is not false after being returned from -- Module:Yesno, and if we are not on a talk page, a tracking category -- is added. checkType('makeWikitextError', 1, msg, 'string') checkType('makeWikitextError', 2, helpLink, 'string', true) yesno = require('Module:Yesno') local title = mw.title.getCurrentTitle() -- Make the help link text. local helpText if helpLink then helpText = ' (help)' else helpText = end -- Make the category text. local category if not title.isTalkPage and yesno(addTrackingCategory) ~= false then category = 'Hatnote templates with errors' category = string.format( '%s:%s', mw.site.namespaces[14].name, category ) else category = end return string.format( '%s', msg, helpText, category ) end
function p.formatPageTables(...) -- Takes a list of page/display tables and returns it as a list of -- formatted links. Nil values are not allowed. local pages = {...} local links = {} for i, t in ipairs(pages) do checkType('formatPageTables', i, t, 'table') local link = t[1] local display = t[2] links[i] = p._formatLink(link, display) end return links end
function p.formatPages(...) -- Formats a list of pages using formatLink and returns it as an array. Nil -- values are not allowed. local pages = {...} local ret = {} for i, page in ipairs(pages) do ret[i] = p._formatLink(page) end return ret end
function p.findNamespaceId(link, removeColon) -- Finds the namespace id (namespace number) of a link or a pagename. This -- function will not work if the link is enclosed in double brackets. Colons -- are trimmed from the start of the link by default. To skip colon -- trimming, set the removeColon parameter to true. checkType('findNamespaceId', 1, link, 'string') checkType('findNamespaceId', 2, removeColon, 'boolean', true) if removeColon ~= false then link = removeInitialColon(link) end local namespace = link:match('^(.-):') if namespace then local nsTable = mw.site.namespaces[namespace] if nsTable then return nsTable.id end end return 0 end
local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end
local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end
-- Helper functions
local p = {}
local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local mArguments -- lazily initialise Module:Arguments local yesno -- lazily initialise Module:Yesno
-- Module:Hatnote -- -- -- -- This module produces hatnote links and links to related articles. It -- -- implements the and meta-templates and includes -- -- helper functions for other Lua hatnote modules. --
References
In 2015, WTCB moved to a new studio in Columbia.
On July 15, 2013 WTCB shifted their format to hot adult contemporary.[5] With the change by sister station WOMG from classic hits to country music on February 28, 2014, WTCB added more older songs.
Beginning in 1993, B106 gradually went back toward a more upbeat Gold based AC format and updated its on-air moniker as B106.7. This format has remained in place ever since. From September 2002 until November 2007, WTCB was the flagship radio station for South Carolina Gamecocks football, taking over from longtime outlet WVOC. This distinction was removed when Citadel Broadcasting moved WNKT from Charleston to Columbia and made it the flagship of all sports, not just football. Citadel merged with Cumulus Media on September 16, 2011.[4]
By the late 1980s, due to changing market conditions, B106 softened its music by dropping the more upbeat music and focused on being a light adult contemporary outlet. At that time, the market had two other AC outlets, WSCQ and new upstart WAAS (now WARQ), fighting for Columbia's AC audience. By the end of 1992, both stations flipped to different formats, leaving B106 as the only AC left in the market. Bloomington Broadcasting purchased the station in 1989 from Keymarket Communications. Bill McElveen became the GM and remained so till Cumulus Media purchased the station in late 2011.
In early 1985, WIGL took the first steps toward improving its coverage of Columbia by building a new 714 ft. tower in Sandy Run and moving the studios to the Granby Building in Cayce. It was rumored that WIGL would remain country and challenge Columbia's longtime country powerhouse, WCOS-FM. However, on April 15, 1985; the station signed on from its new tower as an adult contemporary/CHR/oldies hybrid with the new call letters of WTCB and a new moniker, "B106". Almost overnight, the station became a huge ratings success, with a superior market sound and a signal that covered two-thirds of South Carolina. It provides at least secondary coverage from the fringes of Charlotte to the northern exurbs of Charleston. It beat many stations, including longtime AC WSCQ (now WXBT), in its first Arbitron book. WTCB's immediate impact caused many of the established Columbia stations to rethink their marketing.
[3]